requests.models模块中SSL验证的设置方式
发布时间:2024-01-14 21:59:50
在requests模块中,可以通过设置verify参数来控制SSL验证的方式。verify参数可以设置为以下几种形式:
1. True:默认设置。表示进行SSL验证,使用系统默认的CA证书进行验证。
2. False:表示不进行SSL验证,会忽略对证书的验证。
3. 字符串:可以是一个文件路径,表示使用指定的CA证书文件进行验证;也可以是一个目录路径,表示使用该目录下的所有证书进行验证。
4. 当verify设置为一个可调用对象时,requests会将SSL证书的验证委托给这个对象处理。这个对象需要实现一个__call__(self, sock)方法,该方法接收一个urllib3.util.ssl_.SSLContext对象(requests内部的SSLContext类)。该方法需要返回一个布尔值,表示是否验证通过。
下面是几个使用例子:
1. 使用系统默认的CA证书进行SSL验证:
import requests
response = requests.get('https://www.example.com', verify=True)
print(response.status_code)
2. 忽略SSL验证,不进行任何证书验证:
import requests
response = requests.get('https://www.example.com', verify=False)
print(response.status_code)
3. 使用指定的CA证书文件进行SSL验证:
import requests
response = requests.get('https://www.example.com', verify='/path/to/ca.crt')
print(response.status_code)
4. 使用指定目录下的所有证书进行SSL验证:
import requests
response = requests.get('https://www.example.com', verify='/path/to/certs/')
print(response.status_code)
5. 自定义SSL验证逻辑:
import requests
import socket
from urllib3.util.ssl_ import SSLContext
def verify_ssl_cert(sock):
# 自定义验证逻辑,这里假设总是返回True
return True
# 使用自定义的验证逻辑
response = requests.get('https://www.example.com', verify=verify_ssl_cert)
print(response.status_code)
需要注意的是,忽略SSL验证会导致存在安全风险,建议只在开发环境中使用此方式。在生产环境中,应选择一个可信任的CA证书,并设置verify参数为CA证书的路径或目录。自定义SSL验证逻辑可以用来处理一些特殊情况,但需要确保验证逻辑本身不会引入安全风险。
