从Python 3.9升级到3.11后出现InsecureRequestWarning问题排查
解决Python 3.11升级后urllib3未验证HTTPS请求警告问题
一、检查包版本兼容性
- 对比新旧环境依赖版本:执行
pipenv lock --requirements分别导出Python 3.9和3.11环境的依赖清单,重点核对requests和urllib3的版本差异,这两个包是触发警告的核心依赖。 - 确认包的Python 3.11适配情况:查看
requests和urllib3的版本说明,确保使用的版本明确支持Python 3.11(例如requests 2.31.0+、urllib3 2.0.7+均已完成适配)。 - 单包兼容性测试:创建临时虚拟环境,仅安装
requests和指定版本的urllib3,复用你的证书验证代码进行测试,逐步排查版本组合是否引发警告。
二、禁用警告之外的修复方案
1. 确认证书路径与有效性
- 修正证书路径:Jenkins构建环境的工作目录可能与本地开发环境不同,建议使用绝对路径避免路径错误:
import os cert_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'src/http_client/cert.pem')) response = requests.get(url=url, headers=headers, verify=cert_path) - 验证证书完整性:用
openssl x509 -in src/http_client/cert.pem -text -noout检查证书是否过期、格式是否正确。若目标服务器使用中间CA签发的证书,需将根CA和中间CA证书合并到cert.pem中,确保完整证书链。
2. 更新依赖到兼容版本
- 强制升级
requests和urllib3至适配Python 3.11的版本:
这些版本修复了Python 3.11下的部分证书验证逻辑问题,提升兼容性。pipenv install requests>=2.31.0 urllib3>=2.0.7
3. 排查第三方库的全局设置
- 部分第三方库可能会全局修改urllib3的验证配置,可在请求前添加调试代码排查:
确认测试代码中是否存在import urllib3 print(f"urllib3版本:{urllib3.__version__}") # 检查是否有代码全局禁用警告 if urllib3._disable_warnings: print("发现全局禁用urllib3警告的设置")requests.packages.urllib3.disable_warnings()或修改verify默认值的逻辑。
4. 系统层面指定CA证书
- 在Jenkins构建流程中设置环境变量,让requests全局使用指定证书:
此方法可避免代码中路径配置的不确定性。export REQUESTS_CA_BUNDLE=/path/to/src/http_client/cert.pem
内容的提问来源于stack exchange,提问作者jSvSL
相关产品推荐
相关产品推荐

