Python 官方文档:入门教程 => 点击学习
SSL证书验证requests提供了证书验证的功能,当发送Http请求的时候,它会检查SSL证书,使用verify参数控制是否检查此证书,如果不加verify参数的话,默认是True,会自动验证。很多网站的证书没有被官方CA机构信任,会出现
SSL证书验证
requests提供了证书验证的功能,当发送Http请求的时候,它会检查SSL证书,使用verify参数控制是否检查此证书,如果不加verify参数的话,默认是True,会自动验证。
很多网站的证书没有被官方CA机构信任,会出现证书验证错误的结果,访问的时候可以看到一个证书问题的页面,如下图:
用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文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0