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

带Bearer Token的HTTPS GET:cURL正常但Python requests请求失败

curl与Python requests SSL验证行为差异的原因

两者行为不同核心在于SSL证书信任机制的差异,具体分这几点:

  • 证书信任源不一致
    curl默认使用系统级根证书存储(比如Linux的/etc/ssl/certs、Windows系统证书库、macOS的Keychain),如果你的自签名证书已经被添加到系统信任列表中,curl会自动认可该证书的合法性。
    而Python的requests库默认依赖certifi包提供的独立CA证书集合,这个集合和系统的证书存储完全分离,除非你手动配置,否则它不会识别系统中已添加的自签名证书,因此会抛出SSLCertVerificationError。

  • 证书验证的严格度与兼容性不同
    部分版本的curl对证书链的兼容性更好:比如服务器返回的证书链顺序不符合标准,或者链中包含已被系统信任的自签名根CA时,curl会尝试兼容通过验证;而requests对证书链的验证更严格,只要certifi的CA集合中找不到对应的根证书,或者链顺序有问题,就直接报错。

  • 隐式配置差异
    如果你没有给curl指定--cacert参数,它会自动读取系统CA;而requests的verify参数默认值为True,此时它只会加载certifi的CA包,不会主动读取系统CA。


补充:解决requests验证失败的方法

如果要让requests正常请求,有两种常用方式:

  1. 将自签名证书添加到certifi的CA包中,或者在请求时指定证书路径:
    import requests
    response = requests.get(
        "https://my_website.com:443/api/storage",
        headers={"Authorization": "Bearer <TOKEN>"},
        verify="/path/to/your/self-signed-cert.pem"
    )
    
  2. 临时关闭SSL验证(仅测试环境使用,生产环境禁止):
    response = requests.get(
        "https://my_website.com:443/api/storage",
        headers={"Authorization": "Bearer <TOKEN>"},
        verify=False
    )
    

内容的提问来源于stack exchange,提问作者Jean-Francois T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:47:43