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

时间:2022-12-28 03:33:27

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()

转自:http://www.92ez.com/?action=show&id=23443