一个关于python requests 和SSL证书的问题?
01-15
上GitHub和S.O.找了一会儿没有找到,
有点不好意思上知乎提问-_-如图,python代码如下:
import requestsrequests.get(https://www.zhihu.com/"")然后报错:requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed请问是什么问题,希望不吝赐教。对了,python版本 2.7
这个问题我在这里有回答:如何用 python 爬虫翻墙爬取墙外的网站,特别是全站https的,如facebook等? - 刘奕聪的回答
没想到问题被删,放这里做存档。
---------- 原答案 ----------谢邀。这个问题也是个大坑,Python2 不支持 SNI,不过具体原因我没有去研究,希望有壮士出来解释。解决的办法有两个,最简单的就是关闭校验:response = requests.get(url, verify=False)
- pyOpenSSL == 0.13
- ndg-httpsclient == 0.3.2
- pyasn1 == 0.1.6
import urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()
1.首先运行python的时候关闭Fiddler这个软件,开启它之后运行python会自动改变端口,造成ssl错误。
2.然后添加一下这条:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
3.以上适用python3
sudo pip uninstall -y certifi
sudo pip install certifi==2015.04.28
可能会有用
ssl - Python Requests throwing up SSLErrorpyopenssl对SNI问题加了猴子补丁,requests明明将pyopenssl集成到本地包了,但不清楚为什么没有提供默认检查或者提供相关的hook操作入口,其实pyopenssl上有解决说明
import requests
requests.get("https://www.zhihu.com/",verify=False)
暂时的一个解决办法。。
解决了,requests.post("https://www.zhihu.com/",verify=False)
推薦閱讀: