Python请求接口时,报错:ssl:certificate_verify_failed
在编写公司接口测试的时候,requests.get()方法请求时遇到certificate_verify_failed的问题,如下图
图片:
SSL:ssl:certificate_verify_failed错误,是指连接HTTPS时的ssl证书鉴证失败,在Python2.8及3上都会出现,解决办法如下:
-
有查到两种解决办法:
- 全局取消ssl证书验证,代码如下:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context()
- but,这种方法,我试了一下貌似没起效,有点摸不着头脑,另外这种方法稍微有些不太安全
- 局部取消ssl证书验证,有两种小情况:
第一种:是用urlopen()方法请求时使用的:
import ssl
# 使用ssl创建未验证的上下文,在url中传入上下文参数
context = ssl._create_unverified_context()
# 将context传入url函数的context参数中,比如
urllib2.urlopen('目标网址',context=context).read()
-
此方法亲测可用,
但是我在进行requests.get()请求,所以,这种不太符合我的需求,就又翻找了一下,终于找到了下边这种方法第二种:在requests的get/post方法中都有verify这个参数,表示是否验证
r = requests.get("xxx.com", headers=request_headers, verify=False)
print r.content
- 亲测可用,会报一个warning报警,但是不影响使用,报警如下:
- 到此处certificate_verify_failed 问题已解决。
赠送:requests请求中verify=False时的InsecureRequestWarning问题
最后的warning问题,每次都出现也很不舒服,也可以干掉它,如下
# 禁用requests出现的取消ssl验证的警告,直接引用如下
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
然后run一下,你会发现,不再报警了,棒棒!!!
———————————————————————————————————————————————————————————
引用连接:
https://blog.csdn.net/yixieling4397/article/details/79861379
https://blog.csdn.net/u012478031/article/details/60578318?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase