You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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的版本:
    pipenv install requests>=2.31.0 urllib3>=2.0.7
    
    这些版本修复了Python 3.11下的部分证书验证逻辑问题,提升兼容性。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:26:00