• 解决 requests 2.28.x 版本 SSL 错误


    最近,在使用requests 2.28.1版本进行HTTP post传输时,您可能遇到了一个问题,即SSL验证失败并显示错误消息(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)')))。然而,当您将requests模块降级到2.27.1版本时,一切正常,没有出现任何错误。这让您疑惑为什么2.27版本的请求能够成功,而2.28.1版本的请求会出现错误。可能是什么原因导致requests选择SSL证书的方式发生了变化?

    首先,让我们深入了解这个问题的根本原因。在这种情况下,问题似乎与SSL证书验证有关。SSL证书验证是一种保障数据传输安全的重要机制,它确保您的请求连接到合法的服务器,并且数据在传输过程中受到加密保护。但是,证书验证需要信任一系列根证书颁发机构(Certificate Authorities,简称CA),以验证服务器证书的有效性。

    1. 检查系统证书

    首先,您可以检查系统上安装的证书是否存在或已过期。请求库通常依赖于系统根证书存储来进行SSL证书验证。如果您的系统缺少必要的根证书,或者证书已过期,就会导致验证失败。解决这个问题的方法是:

    - 更新您的操作系统,以确保您的根证书存储是最新的。
    - 如果您有自定义证书,确保它们正确安装并且没有过期。
    - 如果您使用的是虚拟环境,请确保虚拟环境中的证书也是正确的。

    2. 更新或重新安装证书

    如果您确定系统证书没有问题,但仍然遇到SSL验证错误,您可以尝试更新或重新安装证书。这可能会解决问题,因为证书可能已损坏或过期。您可以按照操作系统的文档或CA的指南来执行此操作。

    3. 检查requests模块的SSL验证设置

    您还应该仔细检查requests模块的SSL验证设置。确保您的代码中设置了正确的SSL验证参数。通常,您可以通过以下方式来禁用SSL验证:

    ```python
    import requests

    # 禁用SSL验证(慎用,不推荐)
    response = requests.get('https://example.com', verify=False)
    ```

    然而,禁用SSL验证不是一个好的实践,因为它会降低安全性。如果您确信您的请求应该是安全的,并且仍然遇到验证问题,您可以使用以下方法之一来指定自定义证书路径:

    ```python
    import requests

    # 指定自定义证书文件路径
    response = requests.get('https://example.com', verify='/path/to/custom/certificate.pem')
    ```

     4. 使用其他库或工具

    如果以上解决方案都无法解决问题,您可能需要考虑使用其他库或工具来执行HTTP post传输操作,以避免出现SSL验证问题。

  • 相关阅读:
    FullCalendarDemo5 控件的实例讲解—拖拽实现值班排班(二)
    含电热联合系统的微电网运行优化附Matlab代码
    【微服务专题】Nacos详解
    Redis数据持久化
    兔老大的系统设计(一)健康度系统
    玉米社:SEM竞价推广投放之提升转化操作办法
    Pandas 数据分析系列1--Series&DataFrame数据结构详解
    JavaSE语法中final的作用(面试题经常考!!!)(2.9千字全面解析final关键字)
    IP地址处理攻略:数据库中的存储与转换方法
    TikTok的全球影响:跨文化、跨国界的短视频文化
  • 原文地址:https://blog.csdn.net/weixin_73725158/article/details/134433887