您的位置: 网站首页> requests爬虫> 当前文章

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

老董-我爱我家房产SEO2021-11-15170围观,109赞

  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环境变量。

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

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

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200