解决 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证书验证。如果您的系统缺少必要的根证书,或者证书已过期,就会导致验证失败。解决这个问题的方法是:

  • 更新您的操作系统,以确保您的根证书存储是最新的。

  • 如果您有自定义证书,确保它们正确安装并且没有过期。

  • 如果您使用的是虚拟环境,请确保虚拟环境中的证书也是正确的。

  1. 更新或重新安装证书

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

  1. 检查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')

```

  1. 使用其他库或工具

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

相关推荐
ZH15455891311 分钟前
Flutter for OpenHarmony Python学习助手实战:Web开发框架应用的实现
python·学习·flutter
Ekehlaft3 分钟前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
开源技术8 分钟前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
hedley(●'◡'●)11 分钟前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
Cult Of12 分钟前
Alicea Wind的个人网站开发日志(2)
开发语言·python·vue
啊阿狸不会拉杆18 分钟前
《机器学习导论》第 5 章-多元方法
人工智能·python·算法·机器学习·numpy·matplotlib·多元方法
wangsir.34 分钟前
测试之自动化测试常用函数
python·测试
铁蛋AI编程实战38 分钟前
MemoryLake 实战:构建超长对话 AI 助手的完整代码教程
人工智能·python·microsoft·机器学习
清水白石00843 分钟前
《为什么说 deque 是 Python 滑动窗口的“隐藏神器”?深入解析双端队列的高效之道》
开发语言·python
kjkdd1 小时前
5. LangChain设计理念和发展历程
python·语言模型·langchain·ai编程