在使用requests库进行HTTP请求时,如果在环境变量中设置了’REQUESTS_CA_BUNDLE’,并且在session对象中设置了verify参数为False,那么API请求会使用环境变量中的值而不是session对象中的值。这是因为在requests库中,当session对象中的verify参数被设置为False时,它会优先使用环境变量中的值。
这个问题的发起者(我)遇到了这个bug,它导致了API请求的安全性问题,因为本应该忽略证书验证的请求也会受到环境变量的影响。
解决方案
要解决这个问题,可以在调用session对象之前,先将’REQUESTS_CA_BUNDLE’环境变量设置为None,然后再设置session对象的verify参数。这样,API请求就会优先使用session对象中的值,而不是环境变量中的值。
以下是修改后的代码示例:
import requests
import os
# 设置环境变量'REQUESTS_CA_BUNDLE'为None
os.environ['REQUESTS_CA_BUNDLE'] = None
# 创建session对象
session = requests.Session()
# 设置session对象的verify参数为False
session.verify = False
# 发起HTTP请求
response = session.request(method, url="/".join([self.base_url, url]), headers=headers, data=body, params=query)
在上述代码中,首先将’REQUESTS_CA_BUNDLE’环境变量设置为None,然后创建一个session对象,并将session对象的verify参数设置为False。这样,无论环境变量中的值如何设置,API请求都会优先使用session对象中的值,从而解决了该问题。
通过这种方式,我们可以确保在需要忽略证书验证的情况下,session.verify参数不会被环境变量干扰,提高了API请求的安全性和可靠性。希望这篇文章对解决这个问题有所帮助。如果有任何疑问或需要进一步的解释,请随时提出。