python用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误

requests模块之前一直正常的,某一天开始对https的请求都抛错误了:
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

       起初,以为是代理不稳定,重启代理无效,然后重启机器,无效。代码问题?把错误代码copy到另一台机器上没问题,把在另外一台机器上正常运行的代码再copy到报错机器还是报证书错误。难道是requests库的问题,试了requests.get请求http没问题。

      尝试了各种解决办法,都无果。还是到网上搜下答案吧。找到了两种解决方案:我用的第一种。第二种也备份下。

第一种解决方案:

何谓ssl验证?
SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
在python 2.7中添加一个新的特性,在urlopen请求的时候会验证ssl证书,如果是自签名的ssl证书会出错。

python request ssl error 怎么解决
在request.post 和request.get方法中都有一个verify的参数。把verify参数置为FALSE。 
r = requests.get("xxx.com", headers=request_headers, verify=False) 
print r.content 

第二种解决方案:

试过:

sudo apt-get install ca-certificates
sudo update-ca-certificates

没效果,
最后试了下面的起效的:

sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28

当然,还是有警告:

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning

不够,至少可以先用着了。原因估计就是高版本(2016.2.8)的certifi对证书验证更为严格了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值