快速回答
代理中的Read timed out (ReadTimeout)是什么意思?
读取超时 意味着客户端等待响应下一批字节时间超过读取超时。通过 CrawlRelay 住宅代理,延迟通常由目标响应慢或家庭出口慢造成。请分别设置连接和读取超时,HTML 页面建议约 10 秒连接、30 至 60 秒读取,超时请求可在新出口重试一次。
Read timed out (ReadTimeout)一览
| 错误 | Read timed out (ReadTimeout) |
|---|---|
| 类型 | 客户端超时错误 |
| 发送方 | 您的 HTTP 客户端,在读取超时时间内未收到数据 |
| 定义于 | Client setting, no protocol status |
| 要重试吗? | 是,新出口尝试一两次 |
| 先检查 | 比较您的读取超时与目标正常响应时间 |
Read timed out (ReadTimeout)是什么意思?
客户端通常有两个计时器。连接超时限制客户端打开代理连接的最长等待时间。读取超时限制发送请求后两字节之间的最长等待时间。读取超时意味着连接成功,但响应太慢。
若无明确超时,某些客户端会无限等待。Python requests 默认无超时,单个卡死请求可冻结工作线程。
在Python、curl、Node.js和浏览器中a read timeout是什么样?
每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息:
- Python requests:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT、ESOCKETTIMEDOUT,或您自定义计时器的AbortError - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
导致a read timeout的原因是什么?
最可能的首要原因:
- 目标页面响应慢,如搜索结果页或重动态页面。
- 出口缓慢:家庭上传速度、Wi-Fi 或繁忙的移动基站。
- 大文件一次性读取而非流式读取。
- 为页面类型设置超时过短。
- 浏览器页面在网络空闲策略下,等待站点持续加载追踪器。
如何一步步诊断a read timeout?
- 无代理时计时,得出基线。
- 分别记录首字节时间和总时间。
- 检查慢 URL 的响应大小。
- 浏览器中检查使用了何种
waitUntil条件。
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL如何修复a read timeout?
- 同时设置连接和读取超时:连接约 10 秒,HTML 读取 30 至 60 秒,大文件需更长。
- 对大响应流式处理,分块写入磁盘。
- Playwright 只需 HTML 时,使用
domcontentloaded替代网络空闲事件。 - 阻止浏览器中不需要的重资源,如视频。
- 超时后换新出口重试一次,再将 URL 放入慢速队列。
import httpx
proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)
with httpx.Client(proxy=proxy, timeout=timeout) as client:
try:
r = client.get("https://api.ipify.org")
print(r.status_code, r.text)
except httpx.TimeoutException as exc:
print("timed out:", type(exc).__name__) # ConnectTimeout, ReadTimeout...遇到a read timeout后要重试吗?
读取超时可重试一至两次于新出口。若同一 URL 不断超时,请为其单独设置更长超时放入慢队列,而不是全部调整。注意避免副作用重复:只重试安全重复的请求,如 GET。
Read timed out (ReadTimeout)如何应用于CrawlRelay?
每次无会话 ID 的新 CrawlRelay 连接都用不同住宅出口,重试会测试不同的家庭连接。针对慢目标会话请保持会话短暂:出口慢则会话内所有请求均慢。
网关:gw.crawlrelay.com,端口7777(通过CONNECT的HTTP、HTTPS)和端口7778(SOCKS5)。用户名格式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。相关内容:504 网关超时 · 连接重置 · 并发指南。
Read timed out (ReadTimeout):开发者常问的问题
抓取用代理应设置怎样的超时?
HTML 页面建议先设置约 10 秒连接和 30 秒读取,再根据实际测量调整。JSON API 通常更快,大文件和慢搜页需更长时间。请明确设置超时:Python requests 默认无超时。
超时会消耗流量吗?
仅针对超时前已传输的字节计流量。等待首字节时超时几乎无数据传输。大文件半途超时则已传输部分数据。请流式传输大文件,支持断点续传。
为什么超时呈爆发式发生?
通常是因为目标在负载下变慢,有时是您自身的负载。针对多个出口的突发请求指向目标;单独的超时则指向单个慢出口。突发开始时降低主机的并发量。
本参考中的其他代理错误
HTTP 状态码
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
浏览器和客户端错误
连接和 TLS 错误
带有涵盖失败案例文档的住宅代理
来自US$0.50/GB的CrawlRelay住宅代理,流量永不过期。