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

Python中如何处理API请求中途突发连接中断问题?

处理请求中途突发连接中断的方案

首先你当前的代码存在语法错误,requests.get携带HTTPBasicAuth的正确写法应该是:

res = requests.get(url="你的目标API地址", auth=HTTPBasicAuth(user, password))

针对请求中途突发连接中断的场景,单纯捕获ConnectionError不足以覆盖情况,这类中断通常会触发更具体的异常类型,以下是具体的处理方案:

1. 捕获针对性异常

请求中途断连常见的异常包括:

  • requests.exceptions.ChunkedEncodingError:服务器分块传输数据时中途断开连接
  • ConnectionResetError:底层TCP连接被对方重置(比如服务器主动断开)
  • requests.exceptions.Timeout:若设置了超时时间,中途断连也可能触发超时异常

你可以扩展try-except块来捕获这些异常:

import requests
from requests.auth import HTTPBasicAuth

user = "你的用户名"
password = "你的密码"
api_url = "目标API地址"

try:
    # 务必设置超时时间,避免请求无限挂起
    res = requests.get(api_url, auth=HTTPBasicAuth(user, password), timeout=30)
    # 主动检查响应状态,确保请求正常完成
    res.raise_for_status()
except requests.exceptions.ConnectionError:
    # 处理永久连接失败(你已实现的逻辑)
    print("无法建立初始连接")
except (requests.exceptions.ChunkedEncodingError, ConnectionResetError):
    # 处理请求中途连接中断
    print("请求过程中连接突发中断")
except requests.exceptions.Timeout:
    # 处理超时导致的中断
    print("请求超时")
except requests.exceptions.RequestException as e:
    # 兜底捕获其他所有requests相关异常
    print(f"请求出错: {str(e)}")

2. 临时波动场景:添加自动重试

中途断连很多时候是临时网络波动导致的,你可以结合重试机制自动重试请求。这里用tenacity库实现(先执行pip install tenacity安装):

import requests
from requests.auth import HTTPBasicAuth
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type

user = "你的用户名"
password = "你的密码"
api_url = "目标API地址"

@retry(
    stop=stop_after_attempt(3),  # 最多重试3次
    wait=wait_exponential(multiplier=1, min=2, max=10),  # 指数退避等待(避免频繁重试)
    retry=retry_if_exception_type((requests.exceptions.ChunkedEncodingError, ConnectionResetError, requests.exceptions.Timeout))
)
def send_api_request():
    res = requests.get(api_url, auth=HTTPBasicAuth(user, password), timeout=30)
    res.raise_for_status()
    return res

try:
    response = send_api_request()
    # 处理响应数据
    print(response.json())
except requests.exceptions.RequestException as e:
    print(f"多次重试后仍请求失败: {str(e)}")

关键注意事项

  • 必须设置timeout:如果不设置超时,请求可能会一直挂起,无法触发异常捕获逻辑
  • res.raise_for_status():该方法会在响应状态码为4xx/5xx时抛出HTTPError,确保你能及时感知服务器返回的错误
  • 底层异常单独捕获:ConnectionResetError是Python内置的OSError子类,不属于requests的异常体系,需要单独加入捕获列表

内容的提问来源于stack exchange,提问作者Zee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:54:25