Kurze Antwort
Was bedeutet 429 Too Many Requests bei einem Proxy?
429 Too Many Requests bedeutet, dass die Website Ihre Anfragen drosselt: Sie haben mehr Anfragen gesendet, als in einem Zeitfenster erlaubt sind. Die Lösung ist, weniger zu senden, nicht mehr zu verbergen. Mit CrawlRelay residential Proxies beachten Sie den Retry-After-Header, begrenzen die gleichzeitigen Anfragen pro Host und machen exponentiellen Backoff mit zufälligem Jitter. IP-Rotation, um eine Limitüberschreitung zu verschleiern, verstößt gegen die meisten Nutzungsbedingungen.
429 Too Many Requests auf einen Blick
| Fehler | 429 Too Many Requests |
|---|---|
| Typ | HTTP-Statuscode (4xx, Client-Fehler) |
| Gesendet von | Die Zielwebsite oder ihr API-Gateway |
| Definiert in | RFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3) |
| Noch einmal versuchen? | Ja, nach der Retry-After-Verzögerung oder einem exponentiellen Backoff |
| Zuerst prüfen | Lesen Sie den Retry-After-Header und Ihre Anfragen pro Sekunde pro Host |
Was bedeutet 429 Too Many Requests?
RFC 6585 führte 429 für Rate-Limiting ein. Der Server kann einen Retry-After-Header hinzufügen, entweder als Sekundenanzahl oder HTTP-Datum, der angibt, wann der nächste Versuch erfolgen soll. APIs fügen oft eigene Header hinzu, z. B. X-RateLimit-Remaining.
Ein 429 ist die freundlichste Antwort, die eine Seite einem Scraper geben kann. Sie sagt, der Inhalt ist verfügbar, nur nicht in Ihrem aktuellen Tempo. Seiten, die ignorierte 429s sehen, eskalieren meist auf 403, CAPTCHAs oder permanente Sperren.
Wie sieht a 429 in Python, curl, Node.js und Browsern aus?
Der gleiche Fehler wird in jedem Tool anders angezeigt. Hier sind die Meldungen, nach denen Sie in Ihren Logs suchen sollten:
- Python requests / httpx:
status_code == 429, oft mitRetry-After: 30 - Scrapy: wird von
RetryMiddlewarebearbeitet, da 429 Teil des Standard-RETRY_HTTP_CODESist - curl:
HTTP/2 429gefolgt vonretry-after:in den Antwort-Headern - APIs: ein JSON-Body wie
{"error": "rate_limited"}
Was verursacht a 429?
Wahrscheinlich zuerst:
- Zu viele gleichzeitige Anfragen pro Host. Fünfzig parallele Worker auf einer Domain wirken für viele Seiten wie ein Angriff.
- Kein Delay zwischen Anfragen oder ein fester Delay, der viele Worker zur gleichen Zeit bündelt.
- Neuladeversuche ohne Backoff. Ein Retry-Sturm nach dem ersten 429 vervielfacht die Last.
- Geteilte Limits. Manche Seiten zählen Anfragen pro Konto, API-Key oder Session-Cookie statt pro IP.
- Aufwendige Endpunkte. Such- und Filter-URLs haben oft strengere Limits als statische Seiten.
Wie diagnostiziere ich a 429 Schritt für Schritt?
- Protokollieren Sie den Wert von
Retry-Afterund weitere Ratenbegrenzungs-Header beim ersten 429. - Messen Sie Ihre tatsächliche Anfragenrate pro Host, nicht die Gesamtanfragenrate.
- Prüfen Sie, ob das Limit an die IP, das Cookie oder den API-Key gebunden ist: ändern Sie jeweils nur einen Faktor.
- Lesen Sie die API- oder robots.txt-Dokumentation der Seite; eine
Crawl-delay-Zeile gibt das gewünschte Tempo an.
# 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_URLWie behebe ich a 429?
- Beachten Sie Retry-After. Warten Sie mindestens die vom Server angegebene Zeit.
- Begrenzen Sie die gleichzeitigen Anfragen pro Host, nicht nur global. Scrapy bietet
CONCURRENT_REQUESTS_PER_DOMAINundAUTOTHROTTLE_ENABLED. - Exponentieller Backoff mit Jitter: 1 s, 2 s, 4 s usw., plus eine zufällige Komponente, bis zu einem Maximum.
- Weniger abrufen. Antworten cachen,
If-Modified-SinceoderIf-None-Matchsenden, und Seiten überspringen, die sich nicht geändert haben. - Nutzen Sie die offizielle API, wenn die Seite eine anbietet; deren Limits sind meist dokumentiert.
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))Soll ich nach a 429 einen erneuten Versuch starten?
Ja, ein 429 ist zum späteren Wiederholen gedacht. Warten Sie auf die Retry-After-Verzögerung, falls vorhanden; ansonsten verwenden Sie exponentiellen Backoff mit Jitter und einem Maximum. Zählen Sie aufeinanderfolgende 429s pro Host und verringern Sie die gleichzeitigen Anfragen dieses Hosts, wenn die Zahl steigt. Die Python-Funktion unten erledigt den Grundteil.
Wie wirkt sich 429 Too Many Requests auf CrawlRelay aus?
Ein 429, der über CrawlRelay kommt, enthält die Target-Header und den Body: Das Limit stammt von der Seite, die Dosierung pro Host ist Ihre Aufgabe. Verwenden Sie Sticky Sessions, wenn eine Seite Anfragen pro Session zählt, damit Ihr Tempo messbar bleibt, und lesen Sie den Concurrency-Guide für Einstiegswerte.
Gateway: gw.crawlrelay.com, Port 7777 (HTTP, HTTPS über CONNECT) und Port 7778 (SOCKS5). Benutzername im Format: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Verwandt: 403 Forbidden · 503 Service Unavailable · Concurrency guide.
429 Too Many Requests: Fragen, die Entwickler stellen
Soll ich IPs rotieren, um 429-Fehler zu vermeiden?
Nein. Ein 429 ist eine Bitte der Seite, langsamer zu machen. Die gleiche Anfragenrate auf mehr IPs zu verteilen, um unter einem Pro-IP-Limit zu bleiben, gilt als Umgehung und ist in den meisten Nutzungsbedingungen verboten. Rotation ist nützlich zum Lastverteilen und für Standortwechsel, nicht für Limitsüberschreitungen. Reduzieren Sie Ihr Tempo und cachen Sie, was möglich ist.
Wie lange soll ich nach einem 429 warten?
Warten Sie die in dem Retry-After-Header angegebene Anzahl Sekunden oder bis zum dort genannten Datum. Ohne diesen Header starten Sie mit ein bis zwei Sekunden und verdoppeln die Wartezeit nach jedem neuen 429, mit zusätzlichem Zufallsanteil und einem Maximum von etwa einer Minute. Starten Sie dann mit niedrigerer Rate neu, nicht mit der ursprünglichen, die das 429 ausgelöst hat.
Warum bekomme ich 429 mit nur wenigen Anfragen pro Minute?
Das Limit kann pro Konto, Cookie oder API-Key gelten statt pro IP, oder der Endpunkt ist aufwendig, z. B. eine Suchseite. Manche Seiten setzen auch niedrige Limits für Clients, die sie als Bots einstufen. Prüfen Sie die Antwort-Header und API-Dokumentation der Seite und fragen Sie bei Bedarf dort nach mehr Zugang.
Weitere Proxy-Fehler in diesem Leitfaden
HTTP-Statuscodes
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Browser- und Clientfehler
Verbindungs- und TLS-Fehler
Residential-Proxys mit Dokumentationen, die Fehlerfälle abdecken
CrawlRelay Residential-Proxys von 0,50 $/GB, Traffic, der nie abläuft.