解决Python 2.7.x 使用Requests发起https请求时报Warning的问题

前言

使用Python写小爬虫是一件非常快乐的事情,现在越来越多的网站使用的是https安全链接,但是在使用requests请求https网站的时候会提示一大堆的warning,这虽然不会影响功能,但是看起来还是非常不友好的。

今天咱们就来解决这个问题。

分析

先来看下具体的Warning是啥样的

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py:852: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings InsecureRequestWarning)

看到这个的时候不要担心,只是个Warning不是Error,认真读一下这句话,似乎跟 urllib3 有关系,后面还有个链接地址 https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 。

首先,我这里使用的是Requests库,requests 库其实是基于 urllib 编写的,对 urllib 进行了封装,使得使用时候的体验好了很多,现在 urllib 已经出到了3版本,功能和性能自然是提升了不少。所以,requests最新版本也是基于最新的 urllib3 进行封装。

所以,上面看的哪个提示其实就是 urllib3 的提示,根据提示给出的链接咱们进去看下写了啥。

在urllib2时代对https的处理非常简单,只需要在请求的时候加上 verify=False 即可,这个参数的意思是忽略https安全证书的验证,也就是不验证证书的可靠性,直接请求,这其实是不安全的,因为证书可以伪造,不验证的话就不能保证数据的真实性。

在urllib3时代,官方强制验证https的安全证书,如果没有通过是不能通过请求的,虽然添加忽略验证的参数,但是依然会 给出醒目的 Warning,这一点没毛病。

解决

咱们在写爬虫的时候一般也不会去在意目标地址的证书是否安全,直接开爬,这里咱们就不希望看到一大堆的错误提示,根据官方给出的解决方法,针对Python 2 的方法很简单

>>> import urllib3
>>> urllib3.disable_warnings()
两行代码就行了,但是这里咱们需要注意,咱们用的是Requests库而不是直接使用的urllib3,所以这里咱们不能直接使用官方给定的方案,稍微谷歌了一下找到了解决方案,这个解决方案是在Requests库的官方github的issues上给出的,地址 https://github.com/requests/requests/issues/2214 ,代码
requests.packages.urllib3.disable_warnings()
需要注意的是这里依然需要设置  verify=False 来忽略证书的验证。

如果您觉得文章有帮助到您,请到 https://www.92ez.com/index.php?action=show&id=23403 进行打赏/捐赠,谢谢!
如果您觉得文章有帮助到您,请 使劲戳这里 进行打赏/捐赠,谢谢!
本文链接:https://www.92ez.com/?action=show&id=23443
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

上一篇: 使用Python写一个转存纯真IP数据库的脚本
下一篇: 博客增加https支持

访客评论
#1
回复 欧尼酱 2017-06-07, 8:30 PM
我是个程序员,我只在意error,不在意warning233
回复 KBdancer 2017-06-08, 10:14 AM
@欧尼酱: 一起玩单片机呀 : -D
回复 欧尼酱 2017-06-09, 6:36 PM
@KBdancer: 好啊好啊,你在用什么单片机 ; )
发表评论

评论内容 (必填):