无需 KYC —— 无需身份证、自拍、文件证明。支持加密货币支付:BTC, USDT, USDC, ETH, SOL, LTC
语言: 简体中文
开始使用

代理错误参考 · HTTP 状态码

抓取时出现503服务不可用:含义及解决办法

HTTP 状态码(5xx,服务器错误):每个工具中的精确错误信息、可能原因排序及有效解决方案。

最后更新:

快速回答

代理中的503 Service Unavailable是什么意思?

503服务不可用 表示服务器目前无法处理请求,原因可能是过载、维护或保护策略。通过CrawlRelay住宅代理时,查看Retry-After头和响应体:维护或过载的503会随时间恢复,挑战页面表示网站过滤自动流量,应减慢速度。

503 Service Unavailable一览

错误503 Service Unavailable
类型HTTP 状态码(5xx,服务器错误)
发送方目标网站、其CDN,或代理在无可用出口时
定义于RFC 9110, section 15.6.4 (Retry-After: section 10.2.3)
要重试吗?是,遵循 Retry-After 或退避策略
先检查检查是否有 Retry-After 头和响应体是否为 CDN 挑战页面

503 Service Unavailable是什么意思?

RFC 9110将503定义为临时状况。服务器在线但当前无法服务该请求,可能会通过Retry-After告知何时恢复。

实际应用中,这代码涵盖三种情况:真正过载或维护中的站点、CDN对自动流量显示的挑战页面,以及代理网关因定位过窄而无可用出口。通过响应体和头信息区分。

在Python、curl、Node.js和浏览器中a 503是什么样?

每个工具中相同的失败会有不同的提示信息。请在日志中搜索以下信息:

  • Python requests / httpx: status_code == 503,有时带Retry-After
  • Scrapy: 默认重试(503包含在RETRY_HTTP_CODES)
  • curl: HTTP/2 503,常带server:头指明CDN
  • 浏览器: 维护页或中间检查页

导致a 503的原因是什么?

最可能的首要原因:

  • 目标端过载或维护,常带Retry-After。
  • CDN挑战页面,用503或403状态响应。
  • 你的爬虫负载过重,占据站点流量大部分。
  • 定位过窄,如小城市,暂无匹配出口。
  • 上游CDN或云区域故障。

如何一步步诊断a 503?

  1. 查看Retry-After和server头,观察响应体HTML标题。
  2. 同国用浏览器打开此页面,看用户视图。
  3. 暂停爬虫几分钟,测试单请求:通过则是负载引起。
  4. 放宽定位到国家级,做对比。
用curl测试失败的URL(HTTP端口,详细模式)
# 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 503?

  • 等待并重试,依据Retry-After延迟或指数退避。
  • 降低该主机负载:减少并行请求,延长间隔,启用缓存。
  • 将挑战页面视为停止信号,不要用验证码破解或浏览器伪装工具,降低速率,必要时联系网站。
  • 503伴随窄定位时,扩宽定位。
Python:使用Retry-After、指数回退和抖动重试
import random
import time

import requests

PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}


def fetch(url, attempts=5, timeout=(10, 30)):
    for attempt in range(attempts):
        try:
            r = requests.get(url, proxies=PROXIES, timeout=timeout)
        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
            r = None  # dropped exit, reset or timeout: a new connection gets a new exit
        if r is not None and r.status_code not in RETRY_STATUSES:
            return r
        retry_after = r.headers.get("Retry-After", "") if r is not None else ""
        if retry_after.isdigit():
            wait = int(retry_after)
        else:
            wait = min(60, 2 ** attempt) + random.uniform(0, 1)
        time.sleep(wait)
    raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))

遇到a 503后要重试吗?

重试503要有耐心。存在Retry-After时用其延迟,否则指数回退,从数秒到一两分钟。如果某主机大部分请求返回503超过几分钟,完全暂停,稍后再试。日志中将挑战页面与真实故障分开统计。

503 Service Unavailable如何应用于CrawlRelay?

CrawlRelay通过住宅IP发送请求,按目标地域选取出口。国家级定位覆盖最多出口,城市级更窄。如果仅城市过滤出现503,先用仅国家级测试同一请求,再做修改。

网关:gw.crawlrelay.com,端口7777(通过CONNECT的HTTP、HTTPS)和端口7778(SOCKS5)。用户名格式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。相关内容:429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout。

503 Service Unavailable:开发者常问的问题

为何仅通过代理出现503,而家中直连无此问题?

网站对代理流量区别对待,常通过挑战页面体现,或你定位太窄致出口罕见。对比响应体,挑战页面提示放慢,简短代理讯息和窄定位提示放宽地点过滤。

503等同于被屏蔽吗?

不。真正的503是暂时的,会自动恢复。带503状态的挑战页是过滤,通常表明速度或模式像自动化。降低并发和添加间隔。如站点拒绝自动访问,应尊重,寻API或许可数据。

503最多应重试几次?

重试503三到五次,指数退避,为单个URL合理上限。超过则暂停该主机,不对单URL反复尝试,故障站点靠重试不会更快恢复。记录主机与时间以便之后恢复。

本参考中的其他代理错误

HTTP 状态码

浏览器和客户端错误

连接和 TLS 错误

带有涵盖失败案例文档的住宅代理

来自US$0.50/GB的CrawlRelay住宅代理,流量永不过期。

从 US$0.50/GB 开始 · 无需 KYC

开始使用