使用urlib库请求网址时,发生`ssl.SSLError` certificate verify failed错误解决办法

背景

urlib库是爬虫的一大好手,不管请求网址,爬取网页还是下载文件,urlib都是十分好用,但是最进使用urlib请求一个网址时,发生如下错误:ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)
网上搜索解决方案后,发现浏览器识别证书不匹配,解决的办法也挺多,但是,最终看到Stack Overflow上面一个结果最令人满意,特记录下来。

问题

自己代码如下:

from urllib.request import Request, urlopen
import os

url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)

req = Request(url)
res=urlopen(req)

结果运行时就出现了下面的错误:

File "D:\Anaconda3\lib\urllib\request.py", line 1320, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)>

解决方法

因为在使用urlib.open() 时,因为证书不匹配,导致请求失败,所以在请求中加入证书即可,具体代码见下方:

from urllib.request import Request, urlopen
import os
import ssl #增加的地方

url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)

req = Request(url)
res=urlopen(req)
# 增加证书,把context赋值为ssl的context即可
res = urlopen(req, context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))

猜你喜欢

转载自blog.csdn.net/qq_35203425/article/details/80903065