Réponse rapide
Que signifie 503 Service Unavailable avec un proxy ?
503 Service Unavailable signifie que le serveur ne peut pas traiter la requête pour l’instant, à cause d’une surcharge, maintenance ou règle de protection. Avec les proxies résidentiels CrawlRelay, lisez l’en-tête Retry-After et le corps de la réponse : un 503 pour maintenance ou surcharge s’arrange avec le temps, tandis qu’une page de défi signifie que le site filtre le trafic automatisé et vous devriez ralentir.
503 Service Unavailable en un coup d'œil
| Erreur | 503 Service Unavailable |
|---|---|
| Type | Code HTTP (5xx, erreur serveur) |
| Envoyé par | Le site ciblé, son CDN ou le proxy quand il n’a pas de sortie à offrir |
| Défini dans | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| Réessayer ? | Oui, après un Retry-After ou un délai progressif |
| Vérification initiale | Vérifiez la présence d’un en-tête Retry-After et si le corps est une page de défi CDN |
Que signifie 503 Service Unavailable ?
La RFC 9110 définit le 503 comme une situation temporaire. Le serveur est opérationnel mais refuse ou ne peut pas traiter la requête maintenant, et peut indiquer quand revenir via Retry-After.
En pratique, trois situations sont couvertes par ce code : un site vraiment surchargé ou en maintenance, un CDN qui propose une page de défi au trafic jugé automatisé, et une passerelle proxy sans sortie disponible pour un ciblage très restreint. Le corps et les en-têtes permettent de les distinguer.
À quoi ressemble a 503 en Python, curl, Node.js et navigateurs ?
La même erreur s'affiche différemment selon chaque outil. Voici les messages à rechercher dans vos logs :
- Python requests / httpx :
status_code == 503, parfois avecRetry-After - Scrapy : retente automatiquement (503 est dans
RETRY_HTTP_CODES) - curl :
HTTP/2 503, souvent avec un en-têteserver:nommant le CDN - Navigateurs : une page de maintenance ou interstitielle
Quelles sont les causes de a 503 ?
Probablement en premier lieu :
- Surcharge ou maintenance côté cible, souvent avec
Retry-After. - Page de défi servie par un CDN à une clientèle qu’il souhaite vérifier, avec statut 503 ou 403.
- Votre propre charge, quand votre crawler représente une grosse part du trafic.
- Ciblage trop restreint, par exemple une petite ville, sans sortie correspondante disponible.
- Panne en amont au niveau du CDN ou de la région cloud utilisée par le site.
Comment diagnostiquer a 503 étape par étape ?
- Lisez
Retry-Afteret l’en-têteserver, puis regardez le titre HTML du corps. - Chargez la page dans un navigateur depuis le même pays pour voir ce qu’un utilisateur voit.
- Mettez en pause votre crawler quelques minutes et testez une requête : si elle réussit, votre charge était la cause.
- Élargissez le ciblage au niveau pays et comparez.
# 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_URLComment résoudre a 503 ?
- Attendez et réessayez avec le délai
Retry-Afterou un backoff exponentiel. - Réduisez votre charge sur cet hôte : moins de requêtes parallèles, délais plus longs, mise en cache.
- Considérez une page de défi comme un signal d’arrêt pour ce rythme. N’utilisez pas de solutions de contournement comme la résolution CAPTCHA ou déguisement navigateur ; réduisez le rythme et contactez le site si nécessaire.
- Élargissez le ciblage si le 503 accompagne un filtre ville trop restrictif.
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))Dois-je réessayer après a 503 ?
Réessayez un 503, mais avec patience. Utilisez Retry-After quand présent ; sinon appliquez un délai exponentiel allant de quelques secondes à une ou deux minutes. Si un hôte retourne un 503 à la plupart des requêtes pendant plus de quelques minutes, mettez-le entièrement en pause et revenez plus tard. Comptez séparément les pages de défi et les pannes réelles dans vos logs.
Quelle est l'incidence de 503 Service Unavailable sur CrawlRelay ?
CrawlRelay envoie votre requête via une IP résidentielle choisie pour correspondre à votre ciblage. Un ciblage au niveau pays utilise le plus large éventail de sorties ; un ciblage ville est plus restreint. Si des 503 n’apparaissent qu’avec un filtre ville, testez la même requête au niveau pays avant de modifier autre chose.
Passerelle : gw.crawlrelay.com, port 7777 (HTTP, HTTPS via CONNECT) et port 7778 (SOCKS5). Format du nom d'utilisateur : USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Voir aussi : 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable : questions fréquentes des développeurs
Pourquoi ai-je un 503 uniquement via le proxy et pas chez moi ?
Soit le site traite votre trafic proxy différemment, souvent via une page de défi, soit votre ciblage est tellement restreint que les sorties sont rares. Comparez le corps de réponse dans les deux cas. Une page de défi signifie ralentissez ; un message proxy bref avec ciblage étroit signifie élargissez le filtre de localisation.
Un 503 correspond-il à un blocage ?
Non. Un vrai 503 est temporaire et s’efface avec le temps. Une page de défi servie avec un 503 est un filtre, indiquant généralement que votre rythme ou modèle semble automatisé. Réduisez la concurrence et ajoutez des délais. Si le site refuse tout accès automatisé, respectez-le et cherchez une API ou des données sous licence.
Combien de fois dois-je réessayer un 503 ?
Trois à cinq tentatives avec backoff exponentiel constituent un plafond raisonnable pour une URL. Au-delà, mettez l’hôte en pause au lieu de réessayer chaque URL, car un site en difficulté ne se rétablira pas plus vite avec des tentatives répétées. Enregistrez l’hôte et l’heure pour reprendre plus tard.
Autres erreurs de proxy dans cette référence
Codes d'état HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Erreurs du navigateur et du client
Erreurs de connexion et TLS
Proxies résidentiels avec documentation couvrant les cas de défaillance
Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration.