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

相关推荐
嗯嗯=6 小时前
python学习篇
开发语言·python·学习
WoY20206 小时前
opencv-python在ubuntu系统中缺少依赖
python·opencv·ubuntu
大游小游之老游7 小时前
Python中如何实现一个程序运行时,调用另一文件中的函数
python
mantch8 小时前
个人 LLM 接口服务项目:一个简洁的 AI 入口
人工智能·python·llm
weixin_445054728 小时前
力扣热题51
c++·python·算法·leetcode
朱朱没烦恼yeye8 小时前
java基础学习
java·python·学习
databook9 小时前
数据可视化五大黄金原则:让你的图表“会说话”
python·数据分析·数据可视化
ai_top_trends9 小时前
2026 年度工作计划 PPT 模板与 AI 生成方法详解
人工智能·python·powerpoint
智航GIS9 小时前
9.4 Word 自动化
python·自动化·word
2501_941809149 小时前
面向多活架构与数据地域隔离的互联网系统设计思考与多语言工程实现实践分享记录
java·开发语言·python