一个关于python requests 和SSL证书的问题?

上GitHub和S.O.找了一会儿没有找到, 有点不好意思上知乎提问-_- 如图,python代码如下: import requests requests.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
关注者
47
被浏览
18634
这个问题我在这里有回答:如何用 python 爬虫翻墙爬取墙外的网站,特别是全站https的,如facebook等? - 刘奕聪的回答

没想到问题被删,放这里做存档。
---------- 原答案 ----------

谢邀。
这个问题也是个大坑,Python2 不支持 SNI,不过具体原因我没有去研究,希望有壮士出来解释。
解决的办法有两个,最简单的就是关闭校验:
response = requests.get(url, verify=False)

如果想让 Python2 支持 SNI 功能,需要以下方法:
使用 pip 安装以下依赖:
  • pyOpenSSL == 0.13
  • ndg-httpsclient == 0.3.2
  • pyasn1 == 0.1.6

然后在使用 urllib3 之前的代码中(即在使用 requests 之前),注入以下代码:
import urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()