requests.exceptions.SSLError:python使用requests报错解决办法

本文详细记录了在使用Python的requests库调用GitHub API时遇到的SSLError问题,包括错误的具体内容、错误案例代码及解决方案。通过安装特定的Python包和配置urllib3与certifi,成功解决了HTTPS连接池重试次数过多导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误具体内容
requests.exceptions.SSLError: HTTPSConnectionPool(host=‘api.github.com’, port=443): Max retries exceeded with url: /search/repositories?q=language:python&sort=stars (Caused by SSLError(SSLError(“bad handshake: SysCallError(10054, ‘WSAECONNRESET’)”)))

错误案例:
在运行以下一段代码时发生错误,具体报错内容简要在上方,可先行复制此段代码运行尝试,体验。

import requests
#执行API调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:",r.status_code)

#将API响应存储在一个变量中
response_dict = r.json()
#处理结果
print(response_dict)
print("Total repositories:",response_dict['total_count'])

#探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:",len(repo_dicts))

#研究第一个仓库
repo_dict = repo_dicts[0]
print("\nSelected information about first repository:")
print('Name:',repo_dict['name'])
print('Owner:',repo_dict['owner']['login'])
print('Stars:',repo_dict['stargazers_count'])
print('Repository:',repo_dict['html_url'])
print('Created:',repo_dict['created_at'])
print('Updated:',repo_dict['updated_at'])
print('Description:',repo_dict['description'])

解决办法
经过搜索解决办法以及自己的摸索,大概找出了解决办法,如有不足之处,欢迎指正,不胜感激。
首先声明,解决办法参考自网页:https://blog.youkuaiyun.com/zahuopuboss/article/details/52964809
https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl

Method1:忽视警告(虽然您可以禁用证书验证,但强烈建议您保留它。因此不介绍此方法,如有需要,自行搜索)

Method2:安装以下三个包:
pip install cryptography
pip install pyOpenSSL
pip install certifi
通过使用以下命令与certlib和urllib3一起安装secure
pip install urllib3[secure]
原代码的基础上加上以下代码:

import certifi
import urllib3
http = urllib3.PoolManager(cert_reqs = 'CERT_REQUIRED', ca_certs = certifi.where())

问题到此为止已经解决。

:笔者由于没有学过计算机网络相关课程,在学习python的过程中很多问题依然被保留,如果有感兴趣的朋友,欢迎交流。

### 解决 Python `requests` 库中的 SSLError使用 `requests` 发起 HTTPS 请求时,可能会遇到 SSL 错误。以下是几种有效的解决方案: #### 方法一:禁用证书验证 通过设置参数 `verify=False` 可以跳过 SSL 证书的验证过程。这适用于开发环境或测试场景,在生产环境中应谨慎使用。 ```python import requests from urllib3.exceptions import InsecureRequestWarning # 禁用警告信息 requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) response = requests.get('https://example.com', verify=False) print(response.status_code) ``` 这种方法虽然简单直接[^3],但在实际应用中存在安全隐患,因此建议仅限于特定情况下的临时措施。 #### 方法二:安装额外的安全包 为了增强安全性并修复潜在的 SSL 问题,可以安装 `requests[security]` 扩展模块。该扩展包含了必要的安全依赖项,能够有效处理许多常见的 SSL 认证失败问题。 ```bash pip install "requests[security]" ``` 此操作将会自动下载并配置所需的组件,从而提高连接的安全性和稳定性[^1]。 #### 方法三:更新 certifi 包 有时 SSL 错误可能是由于本地 CA 证书库过期造成的。可以通过升级 `certifi` 来获取最新的受信任根证书列表。 ```bash pip install --upgrade certifi ``` 完成上述命令后重试原来的 HTTP(S) 请求即可。 #### 方法四:指定自定义CA文件路径 如果应用程序运行在一个特殊网络环境下,则可能需要提供一个可信的 CA 文件来替代默认的信任链。 ```python import os import requests ca_path = '/path/to/ca-bundle.crt' if not os.path.exists(ca_path): raise FileNotFoundError(f'Custom CA bundle does not exist at {ca_path}') response = requests.get('https://example.com', verify=ca_path) print(response.status_code) ``` 这种方式允许开发者灵活应对不同部署条件下的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值