Py 坑之 CERTIFICATE_VERIFY_FAILED
Python 升级到 2.7.9 之后引入了一个新特性,当你urllib.urlopen
一个 https 的时候,会验证一次 SSL 证书,当目标网站使用的是自签名的证书时就会爆出一个 urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>
的错误消息,详细信息可以在这里查看。
但是我们就是要抓取这个站点的信息啊,Python 提供了这么两个方法。
import ssl
import urllib2
# This restores the same behavior as before.
context = ssl._create_unverified_context()
print urllib2.urlopen("https://www.12306.cn/mormhweb/", context=context).read()
还有一个全局取消的方式
import ssl
import urllib2
ssl._create_default_https_context = ssl._create_unverified_context
print urllib2.urlopen("https://www.12306.cn/mormhweb/").read()