在用python写爬虫抓取一些https站点的时候遇到过这样的错误:
requests.exceptions.SSLError: [Errno 1] _ssl.c:503: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
解决方案一
requests抛出了一个SSLError,解决这个问题最简单的方式是关闭校验。
response = requests.get(url, verify=False)
解决方案二
当然关闭校验会引发中间人攻击这样的安全问题,但是对于爬虫系统来说还好。不过细究一下原因,可以归结到Python 2.x 不支持 SNI。
pyOpenSSL对SNI问题加了猴子补丁,有对这个问题的解决方案。
首先安装依赖。
pyOpenSSL == 0.13
ndg-httpsclient == 0.3.2
pyasn1 == 0.1.6
pip install pyopenssl ndg-httpsclient pyasn1
然后在使用urllib3之前,即requests之前写以下代码。
try: import urllib3.contrib.pyopenssl urllib3.contrib.pyopenssl.inject_into_urllib3() except ImportError: pass
另外requests对于SSL问题有一些额外支持来解决这个问题的。安装requests的时候加参数即可安装这些额外的包依赖了。
pip install requests[security]
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!