python教程

当前位置:首页 > requests爬虫 > 当前文章

requests爬虫

requests的SSL证书验证及警告处理

2021-11-15 53赞 老董笔记

  https是http和ssl协议的混合体,ssl使得http访问变的安全(https与证书是另外1个大话题)。如果网站没有设置好https证书或者网站的https证书不被CA机构认可,

  那么访问网站可能就会出现如下提示:

  像浏览器一样,Requests也可以为 HTTPS 请求验证 SSL 证书,Requests 默认附带了一套它信任的根证书,来自于 Mozilla trust store。。SSL 验证默认是开启的,即verify参数默认=True。

	  requests.get('https://github.com', verify=True)

  Requests默认附带的根证书在每次Requests更新时才会更新,如果固定使用某一版本的Requests那么证书有可能已经太旧了。

  如果证书会导致证书验证失败Requests会抛出SSLError,requests.exceptions.SSLError:xxxx

  如果不进行证书验证可以设置verify=False,但是不验证证书会抛出InsecureRequestWarning异常

	  requests.get('https://www.baidu.com', verify=False)

	  requests.get('https://www.baidu.com', verify=False)
InsecureRequestWarning: Unverified HTTPS request is being made to host '127.0.0.1'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning,

  如果要禁用异常提示有两种方法可以实现

	  from requests.packages import urllib3
           urllib3.disable_warnings()
           r= requests.get('https://www.baidu.com',verify=False)

	  from requests.packages.urllib3.exceptions import InsecureRequestWarning
           requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
           r= requests.get('https://www.baidu.com',verify=False)


  此外,requests的verify参数还可以填写成一个证书文件地址(CA_BUNDLE文件),如果 verify 设为文件夹路径,文件夹必须通过 OpenSSL 提供的 c_rehash 工具处理。

	  requests.get('https://github.com', verify='/path/to/certfile')

  或者将证书文件路径保持在会话中:

	  s = requests.Session()
	  s.verify = '/path/to/certfile'

  你还可以通过 REQUESTS_CA_BUNDLE 环境变量定义可信任 CA 列表。对于私有证书(或者其他非CA机构颁发的证书),可以传递一个证书文件路径给verify参数,也可以设置REQUEST_CA_BUNDLE环境变量。

感兴趣直接点击图片获取>>

文章评论

requests的SSL证书验证及警告处理文章写得不错,值得赞赏