广告
返回顶部
首页 > 资讯 > 后端开发 > Python >requests--证书验证
  • 894
分享到

requests--证书验证

证书requests 2023-01-30 23:01:01 894人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

SSL证书验证requests提供了证书验证的功能,当发送Http请求的时候,它会检查SSL证书,使用verify参数控制是否检查此证书,如果不加verify参数的话,默认是True,会自动验证。很多网站的证书没有被官方CA机构信任,会出现

SSL证书验证

requests提供了证书验证的功能,当发送Http请求的时候,它会检查SSL证书,使用verify参数控制是否检查此证书,如果不加verify参数的话,默认是True,会自动验证。

很多网站的证书没有被官方CA机构信任,会出现证书验证错误的结果,访问的时候可以看到一个证书问题的页面,如下图:

image.png


用requests来测试一下:

import requests

response = requests.get('https://www.ebuy17.com/')
print(response.status_code)

返回信息:

requests.exceptions.SSLError: HTTPSConnectionPool(host='www.ebuy17.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError("hostname 'www.ebuy17.com' doesn't match either of 'www.nbxmsyj.com', 'nbxmsyj.com'")))


这里提示了一个错误SSLError,表示证书验证错误,如果请求一个HTTPS站点,但是证书验证错误的页面时,就会报这种错误,如何避免类似错误,很简单,把verify参数设置成False即可,代码如下:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
response = requests.get('https://www.ebuy17.com/', headers=headers, verify=False)
print(response.status_code)

返回信息:

C:\python3.7.2\lib\site-packages\urllib3\connectionpool.py:847: 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)

200


出现了一个警告信息,它建议指定证书,可以通过设置忽略警告的方式来屏蔽这个警告。

import requests
import urllib3

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
urllib3.disable_warnings()
response = requests.get('https://www.ebuy17.com/', headers=headers, verify=False)
print(response.status_code)

返回信息:

200


或者通过捕获警告日志的方式忽略警告,如下:

import requests
import logging

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
logging.captureWarnings(True)
response = requests.get('https://www.ebuy17.com/', headers=headers, verify=False)
print(response.status_code)

返回信息:

200



也可以指定一个本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或一个包含两个文件路径的元组,使用这种方法需要有crt和key文件,并且指定它们的路径,如下:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
response = requests.get('https://www.ebuy17.com/', headers=headers, verify=False, cert=('/path/server.crt', '/path/key'))
print(response.status_code)

返回信息:

200

--结束END--

本文标题: requests--证书验证

本文链接: https://www.lsjlt.com/news/180768.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作