解决 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验证问题。

相关推荐
金銀銅鐵4 小时前
[Python] 扩展欧几里得算法
python·数学·算法
Duckdblab5 小时前
DuckDB 性能调优终极指南:打造闪电般的分析体验
python
带派擂总5 小时前
Python全栈开发精华版最全合集(包含各种面试题) Day24_异常和错误
python
金銀銅鐵8 小时前
n^5 和 n 的个位数是否总相等?
python·数学
aqi0011 小时前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵12 小时前
借助 Pygame 探索最大公约数的规律
python·数学·游戏
ServBay1 天前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户8356290780511 天前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python
用户8356290780511 天前
使用 Python 管理 Excel 工作表:创建、复制、删除与重命名
后端·python