Szybka odpowiedź
Co oznacza 503 Service Unavailable w kontekście proxy?
503 Service Unavailable oznacza, że serwer nie może obsłużyć żądania w danym momencie z powodu przeciążenia, prac konserwacyjnych lub reguły ochronnej. Korzystając z residential proxy CrawlRelay, przeczytaj nagłówek Retry-After i treść odpowiedzi: przeciążenie lub konserwacja ustępują z czasem, a strona wyzwania oznacza filtrowanie ruchu automatycznego i konieczność zwolnienia tempa.
503 Service Unavailable w skrócie
| Błąd | 503 Service Unavailable |
|---|---|
| Typ | Kod HTTP (5xx, błąd serwera) |
| Wysłane przez | Docelowa strona, jej CDN lub proxy, gdy nie ma dostępnego wyjścia |
| Zdefiniowano w | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| Spróbować ponownie? | Tak, po Retry-After lub czasie odczekania |
| Najpierw sprawdź | Sprawdź nagłówek Retry-After i czy treść to strona wyzwania CDN |
Co oznacza 503 Service Unavailable?
RFC 9110 definiuje 503 jako stan tymczasowy. Serwer działa, ale nie jest w stanie obsłużyć tego żądania teraz i może poinformować, kiedy wrócić, za pomocą Retry-After.
W praktyce ten kod dzielą trzy sytuacje: strona przeciążona lub w konserwacji, CDN serwujące stronę wyzwania dla ruchu uznanego za automatyczny oraz proxy gateway bez dostępnego wyjścia przy bardzo wąskim targetowaniu. Treść i nagłówki pozwalają je rozróżnić.
Jak wygląda a 503 w Python, curl, Node.js i przeglądarkach?
Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:
- Python requests / httpx:
status_code == 503, czasem zRetry-After - Scrapy: domyślnie ponawia (503 jest w
RETRY_HTTP_CODES) - curl:
HTTP/2 503, często z nagłówkiemserver:wskazującym CDN - Przeglądarki: strona konserwacji lub pośrednia strona weryfikacji
Co powoduje a 503?
Najczęściej na początku:
- Przeciążenie lub konserwacja na stronie docelowej, często z nagłówkiem
Retry-After. - Strona wyzwania serwowana przez CDN klientom, którzy mają być sprawdzeni, ze statusem 503 lub 403.
- Twój własny ruch, jeśli crawler generuje duży procent ruchu na tej stronie.
- Wąskie targetowanie, np. małe miasto, gdy w danym momencie brak pasujących wyjść.
- Awaria upstream w CDN lub chmurze używanej przez stronę.
Jak krok po kroku zdiagnozować a 503?
- Przeczytaj nagłówki
Retry-Afteriserver, a potem sprawdź tytuł HTML w treści. - Załaduj stronę w przeglądarce z tego samego kraju, aby zobaczyć, co widzi człowiek.
- Wstrzymaj crawler na kilka minut i przetestuj pojedyncze żądanie: jeśli zadziała, to Twój ruch był przyczyną.
- Poszerz targetowanie do poziomu kraju i porównaj wyniki.
# 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_URLJak naprawić a 503?
- Czekaj i ponów z opóźnieniem
Retry-Afterlub stosuj wykładniczy backoff. - Zmniejsz obciążenie na tym hoście: mniej równoległych żądań, dłuższe opóźnienia, cache.
- Traktuj stronę wyzwania jako sygnał do zatrzymania tempa. Nie korzystaj z narzędzi do rozwiązywania CAPTCHA ani ukrywania przeglądarki, aby ją ominąć; zwolnij tempo i skontaktuj się ze stroną, jeśli potrzebujesz dostępu.
- Poszerz targetowanie jeśli 503 pojawia się z wąskim filtrem miasta.
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))Czy warto ponawiać próbę po a 503?
Ponawiaj 503, ale cierpliwie. Używaj Retry-After, jeśli jest dostępny, w przeciwnym razie stosuj wykładniczy backoff od kilku sekund do minuty lub dwóch. Jeśli host zwraca 503 dla większości żądań przez więcej niż kilka minut, wstrzymaj go całkowicie i wróć później. W logach licz strony wyzwania oddzielnie od rzeczywistych awarii.
Jak 503 Service Unavailable odnosi się do CrawlRelay?
CrawlRelay wysyła Twoje żądanie przez residential IP dobrany do targetowania. Targetowanie na poziomie kraju korzysta z najszerszego zestawu wyjść; na poziomie miasta – węższego. Jeśli 503 pojawia się tylko z filtrem miasta, przetestuj ten sam request z samym krajem przed zmianą czegokolwiek.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable: pytania, które zadają deweloperzy
Dlaczego 503 pojawia się tylko przez proxy, a nie w domu?
Albo strona traktuje Twój ruch z proxy inaczej, często pokazując stronę wyzwania, albo targetowanie jest tak wąskie, że wyjścia są rzadkie. Porównaj treść odpowiedzi w obu przypadkach. Strona wyzwania oznacza zwolnienie tempa; krótki komunikat proxy i wąskie targetowanie oznacza rozszerzenie filtra lokalizacji.
Czy 503 oznacza zablokowanie?
Nie. Prawdziwy 503 jest tymczasowy i ustępuje z czasem. Strona wyzwania z 503 jest filtrem, zwykle oznaczającym, że Twoje tempo lub wzór ruchu wygląda na automatyczny. Zmniejsz współbieżność i dodaj opóźnienia. Jeśli strona nie chce automatycznego dostępu wcale, szanuj to i poszukaj API lub licencjonowanych danych.
Ile razy powinienem ponawiać 503?
Trzy do pięciu ponowień z wykładniczym backoff to rozsądny limit dla jednego URL. Po tym wstrzymaj cały host zamiast ponawiać pojedyncze URL, bo strona mająca problem nie poprawi się szybciej przy ponowieniach. Zaloguj host i czas, aby można było wznowić później.
Inne błędy proxy w tym odniesieniu
Kody statusu HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Błędy w przeglądarce i kliencie
Błędy połączenia i TLS
Proxy rezydencjalne z dokumentacją opisującą przypadki błędów
CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.