You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests模块遇ConnectionError问题求助

解决requests模块持续出现ConnectionError的常见方案

以下是排查和解决这类问题的常见思路,按优先级排序:

1. 确认目标API的可达性

  • 直接用浏览器访问https://api.example.com/data,或在终端执行curl https://api.example.com/data,验证是否能正常返回响应。如果浏览器也无法访问,问题大概率在API服务端(如服务宕机、域名解析失败、IP被封禁)。
  • 用nslookup api.example.com检查域名解析是否正常,确认解析出的IP是预期的服务器地址。

2. 检查代理配置

如果你的网络需要通过代理访问外网,requests默认不会自动使用系统代理,需手动配置:

proxies = {
    'http': 'http://your-proxy-address:port',
    'https': 'https://your-proxy-address:port',
}
response = requests.get(url, proxies=proxies)

若想让requests自动读取系统代理,可开启环境变量支持:

session = requests.Session()
session.trust_env = True  # 启用系统代理读取
response = session.get(url)

3. 处理SSL证书问题

部分网站的SSL证书不被系统信任,会触发连接失败:

  • 临时关闭证书验证(生产环境禁止使用):
response = requests.get(url, verify=False)
  • 或指定本地信任的证书文件:
response = requests.get(url, verify='/path/to/your/cert.pem')

4. 添加超时设置

未设置超时可能导致连接无限等待,最终触发ConnectionError,建议明确超时时间:

response = requests.get(url, timeout=10)  # 设置10秒超时(连接+读取)

5. 模拟浏览器User-Agent

部分API会拦截requests默认的UA标识,模拟浏览器UA可绕过限制:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)

6. 启用重试机制

偶尔的连接波动可通过重试解决,用HTTPAdapter配置重试策略:

from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

session = requests.Session()
# 设置连接重试3次,每次重试间隔递增
retry_strategy = Retry(
    connect=3,
    backoff_factor=0.5
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get(url)

7. 排查本地安全软件

本地防火墙、杀毒软件可能拦截Python的出站请求,可暂时关闭测试,或把Python程序加入安全软件白名单。

8. 细化异常捕获定位问题

将通用的RequestException拆分为更具体的异常,便于精准定位错误类型:

import requests

url = 'https://api.example.com/data'
try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
    # 处理响应数据
except requests.exceptions.ConnectionError as e:
    print(f"连接错误:{e}")
except requests.exceptions.SSLError as e:
    print(f"SSL证书错误:{e}")
except requests.exceptions.ProxyError as e:
    print(f"代理错误:{e}")
except requests.exceptions.RequestException as e:
    print(f"其他请求错误:{e}")

内容的提问来源于stack exchange,提问作者Sumit Kumar Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:21