背景
requests库和urlib库一样都是请求网址的python库,只不过requests库是第三方的,用起来感觉比urlib简洁。最近下载数据时,使用requests库报错:
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
网上搜索解决方案后,发现浏览器识别证书不匹配,有个野路子方法最简单,这里就记录下来:
问题
自己代码如下,这里可以参考我前面的博客,使用urlib请求网页的问题解决,两者对比下来,还是requests库好用:
import requests
url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)
req = requests.get(url)
运行上述代码时,就发生了一下错误:
File "D:\Anaconda3\lib\site-packages\requests\adapters.py", line 512, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
解决方法
一个最简单的野路子的解决方法是让request请求时,就不验证了,一了百了,简单粗暴。
具体代码如下:
import requests
# 屏蔽warning信息
requests.packages.urllib3.disable_warnings()
url = r'https://gdc-api.nci.nih.gov/data/'
UUID = r'7661a652-f22c-4c01-8851-2b9cf6edd739'
url = os.path.join(url, UUID)
req = requests.get(url,verify=False)
注意上述代码必须加屏蔽warning信息那一句,不然一直输出下面异常,也挺难看的。
InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)