Respuesta rápida
¿Qué significa 503 Service Unavailable con un proxy?
503 Service Unavailable significa que el servidor no puede atender la petición ahora mismo, por sobrecarga, mantenimiento o regla protectora. Con los proxies residenciales de CrawlRelay, lee el encabezado Retry-After y el cuerpo de la respuesta: un 503 por mantenimiento o sobrecarga se resuelve con el tiempo, mientras que una página de desafío indica que el sitio está filtrando tráfico automatizado y deberías reducir la velocidad.
503 Service Unavailable en pocas palabras
| Error | 503 Service Unavailable |
|---|---|
| Tipo | Código de estado HTTP (5xx, error servidor) |
| Enviado por | El sitio web objetivo, su CDN o el proxy cuando no tiene salida disponible |
| Definido en | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| ¿Reintentar? | Sí, después del Retry-After o una demora progresiva |
| Primera comprobación | Busca un encabezado Retry-After y si el cuerpo es una página de desafío de CDN |
¿Qué significa 503 Service Unavailable?
La RFC 9110 define el 503 como una condición temporal. El servidor está activo pero no quiere o no puede atender esta petición ahora, y puede indicar cuándo volver con Retry-After.
En la práctica, tres situaciones comparten este código: un sitio realmente sobrecargado o en mantenimiento, una CDN que muestra una página de desafío al tráfico que considera automatizado, y un gateway proxy sin salida disponible para segmentación muy limitada. El cuerpo y los encabezados los diferencian.
¿Cómo se ve a 503 en Python, curl, Node.js y navegadores?
El mismo fallo se muestra de forma diferente en cada herramienta. Estos son los mensajes que debes buscar en tus registros:
- Python requests / httpx:
status_code == 503, a veces conRetry-After - Scrapy: reintentos por defecto (503 está en
RETRY_HTTP_CODES) - curl:
HTTP/2 503, a menudo con encabezadoserver:nombrando la CDN - Navegadores: una página de mantenimiento o intersticial de verificación
¿Qué causa a 503?
Lo más probable al principio:
- Sobrecarga o mantenimiento en el objetivo, a menudo con
Retry-After. - Una página de desafío que una CDN sirve a clientes que quiere verificar, con estado 503 o 403.
- Tu propia carga, cuando tu crawler es una gran parte del tráfico del sitio.
- Segmentación limitada, como una ciudad pequeña, cuando no hay salidas disponibles en ese momento.
- Una caída upstream en la CDN o región cloud que usa el sitio.
¿Cómo diagnostico a 503 paso a paso?
- Lee
Retry-Aftery el encabezadoserver, luego revisa el título HTML del cuerpo. - Carga la página en un navegador desde el mismo país para ver lo que ve una persona.
- Pausa tu crawler unos minutos y prueba una petición: si pasa, tu carga fue el disparador.
- Amplía la segmentación al nivel país y compara.
# 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¿Cómo soluciono a 503?
- Espera y reintenta con el retraso
Retry-Aftero un backoff exponencial. - Reduce tu carga en ese host: menos solicitudes paralelas, demoras más largas, caché.
- Trata una página de desafío como señal de parada para esa velocidad. No uses herramientas para resolver CAPTCHA ni disfrazar el navegador para pasarla; reduce la tasa y contacta el sitio si necesitas acceso.
- Amplía la segmentación cuando el 503 viene con un filtro de ciudad limitado.
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))¿Debo reintentar después de a 503?
Reintenta un 503, pero con paciencia. Usa Retry-After si está presente; de lo contrario, retrocede exponencialmente desde unos segundos hasta uno o dos minutos. Si un host devuelve 503 a la mayoría de solicitudes por más de unos minutos, ponlo en pausa y vuelve más tarde. Cuenta las páginas de desafío separadamente de las caídas reales en tus registros.
¿Cómo se aplica 503 Service Unavailable a CrawlRelay?
CrawlRelay envía tu solicitud a través de una IP residencial seleccionada para coincidir con tu segmentación. La segmentación a nivel país usa el conjunto más amplio de salidas; la segmentación a nivel ciudad es más limitada. Si los 503 aparecen solo con un filtro por ciudad, prueba la misma solicitud solo con el país antes de cambiar algo.
Gateway: gw.crawlrelay.com, puerto 7777 (HTTP, HTTPS a través de CONNECT) y puerto 7778 (SOCKS5). Formato de usuario: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Relacionado: 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable: preguntas que hacen los desarrolladores
¿Por qué recibo 503 solo a través del proxy y no en casa?
O bien el sitio trata tu tráfico proxy de forma diferente, mostrando a menudo una página de desafío, o tu segmentación es tan limitada que las salidas escasean. Compara el cuerpo de la respuesta en ambos casos. Una página de desafío significa desacelerar; un mensaje corto de proxy con segmentación limitada significa ampliar el filtro de ubicación.
¿Es un 503 lo mismo que estar bloqueado?
No. Un 503 real es temporal y se resuelve con el tiempo. Una página de desafío servida con 503 es un filtro, y usualmente significa que tu ritmo o patrón parece automatizado. Reduce la concurrencia y añade demoras. Si el sitio no quiere acceso automatizado, respeta eso y busca una API o datos con licencia.
¿Cuántas veces debo reintentar un 503?
De tres a cinco veces con retroceso exponencial es un límite razonable para una URL. Más allá, pausa todo el host en vez de reintentar URLs individuales, porque un sitio en problemas no mejora más rápido con reintentos. Registra el host y hora para poder retomarlo luego.
Otros errores de proxy en esta referencia
Códigos de estado HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errores de navegador y cliente
Errores de conexión y TLS
Proxies residenciales con documentación que cubre los casos de fallo
CrawlRelay proxies residenciales de 0,50 US$/GB, tráfico que nunca expira.