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

设置timeout后Python Requests响应更快,如何立即获取数据?

解决requests调用EPA API时无需等待超时即可立即获取响应的问题

你碰到的情况是服务器返回响应后没主动关闭连接,导致requests默认会一直等后续数据。要在拿到完整响应后立刻获取数据,不用靠timeout触发,有两种实用方法:

方法1:开启流式响应并主动读取全部内容

给requests.get()加上stream=True参数,这时requests不会自动缓存整个响应。你主动调用response.content或response.text读取完所有内容后,连接会直接关闭,不用再等超时:

import requests
import json

# 先补全header定义(示例里漏了)
header = {"User-Agent": "Mozilla/5.0"}  # 按需添加请求头
url = "https://aqs.epa.gov/data/api/monitors/byState?email=test@aqs.api&key=test&param=42401&bdate=20150501&edate=20150502&state=49"

response = requests.get(url, headers=header, stream=True)
# 读取完整响应
full_content = response.content
# 解析成JSON
data = json.loads(full_content)
print(data)

方法2:设置精准的分阶段超时(可选)

如果还是想保留timeout机制,推荐用元组形式的timeout,分别指定连接超时和读取超时,既能控制连接阶段的等待时间,也能避免无限制等后续数据:

# 连接超时2秒,读取超时3秒,按需调整数值
response = requests.get(url, headers=header, timeout=(2, 3))
print(response.json())

为什么会出现这种情况?

当服务器用分块传输编码且没在响应头里写Content-Length时,requests没法提前知道响应总长度,默认会一直等服务器主动关连接。开stream=True后主动读完全部内容,相当于告诉requests“已经拿完数据了”;而分阶段timeout则直接限制了读取阶段的最长等待时间,避免不必要的阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:32:03