• 解决requests 2.28.x版本SSL错误:证书验证失败


    1、问题背景

    在使用requests 2.28.1版本时,我进行HTTP post传输报告负载时,由于SSL验证设置为True,请求失败,错误如下:(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证书的方式发生了变化?

    在这里插入图片描述

    2、解决方案

    针对此问题,有一些可能的解决方案可以尝试,以解决SSL证书验证失败的问题:

    a、检查系统证书:

    首先,您可以检查系统上安装的SSL证书。SSL证书通常位于操作系统的特定位置,不同操作系统可能有不同的存储位置。确保这些证书存在并且没有过期。如果您发现证书不存在或已过期,您可以尝试重新安装或更新这些证书。这有助于确保requests模块能够正确识别本地颁发者证书。

    b、更新CA证书包:

    有时候,SSL证书问题可能是由于操作系统的CA证书包过时而引起的。您可以尝试更新操作系统的CA证书包,以确保其中包含了最新的根证书和中间证书。这可以通过操作系统的包管理器或手动下载更新证书包来完成。

    c、检查requests模块设置:

    确保您的requests模块的SSL验证设置正确。在2.28.x版本中,可能对SSL验证的默认行为进行了一些更改。您可以通过设置requests的SSL验证参数来强制进行证书验证或禁用它,具体取决于您的需求。例如,您可以使用以下代码来禁用SSL验证:

    import requests
    
    requests.packages.urllib3.disable_warnings()
    response = requests.get('https://example.com', verify=False)
    
    • 1
    • 2
    • 3
    • 4

    请注意,禁用SSL验证可能会降低安全性,只在确定请求目标是可信的情况下使用。

    d、考虑使用其他库或工具:

    如果以上解决方案都无法解决问题,您可以考虑使用其他HTTP请求库或工具,以避免出现此SSL证书验证问题。例如,您可以尝试使用http.clienturllib来进行HTTP请求,或者使用更高级的HTTP库,如httpx。不同的库可能对SSL验证有不同的实现方式,可能适用于您的情况。

    最终,通过尝试以上解决方案中的一种或多种,您应该能够解决requests 2.28.x版本中的SSL错误问题,并成功发起HTTP post请求。确保在做出任何更改之前备份您的代码,并谨慎测试以确保安全性和稳定性。希望这些解决方案能够帮助您解决您的问题!如果您有任何进一步的疑问或需要更多帮助,请随时提出。

  • 相关阅读:
    自己学习Cesium的笔记简介
    Mybatis 动态SQL – 使用choose标签动态生成条件语句
    玩转“产业生态”,长城汽车森林生态很“未来”
    PHP is_file 和file_exists的区别
    中介者模式:简化对象间的通信
    【算法竞赛刷题模板30】状态压缩dp题总结
    正则表达式
    常用算法记录整理
    伦敦金的走势高低的规律
    聚观早报 | 飞书签约韵达速递;蔚来首颗自研芯片“杨戬”量产
  • 原文地址:https://blog.csdn.net/weixin_44617651/article/details/134458460