Zonder KYC — geen ID, geen selfie, geen documenten. Betaal met crypto: BTC, USDT, USDC, ETH, SOL, LTC
Taal: Nederlands
Aan de slag

Proxy foutreferentie · HTTP-statuscodes

429 Too Many Requests bij scraping: wat het betekent en hoe het op te lossen

HTTP-statuscode (4xx, clientfout): het exacte bericht in elk hulpmiddel, de waarschijnlijke oorzaken in volgorde, en de oplossing die werkt.

Laatst bijgewerkt: · 5 min leestijd

Kort antwoord

Wat betekent 429 Too Many Requests bij een proxy?

429 Too Many Requests betekent dat de website je verzoekt het tempo te beperken: je stuurde meer verzoeken dan toegestaan in een tijdsvenster. De oplossing is minder verzoeken sturen, niet proberen te verbergen. Met CrawlRelay residential proxies respecteer je de Retry-After header, beperk je de gelijktijdigheid per host en pas je een exponentiële backoff toe met willekeurige jitter. IP-rotatie om een site-limiet te overschrijden breekt de meeste gebruiksvoorwaarden.

429 Too Many Requests in één oogopslag

Fout429 Too Many Requests
TypeHTTP-statuscode (4xx, clientfout)
Verzonden doorDe doelwebsite of zijn API-gateway
Gedefinieerd inRFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3)
Opnieuw proberen?Ja, na de Retry-After wachttijd of een exponentiële backoff
Eerst controlerenLees de Retry-After header en je verzoeken per seconde per host

Wat betekent 429 Too Many Requests?

RFC 6585 introduceerde 429 voor rate limiting. De server kan een Retry-After header toevoegen, met een aantal seconden of een HTTP-datum, waarop je terug mag komen. API's voegen vaak hun eigen headers toe, zoals X-RateLimit-Remaining.

Een 429 is het meest beleefde antwoord dat een site een scraper kan geven. Het betekent dat de inhoud beschikbaar is, maar niet op jouw huidige tempo. Sites die 429s negeren escaleren meestal naar 403s, CAPTCHA's of permanente blokkades.

Hoe ziet a 429 eruit in Python, curl, Node.js en browsers?

Dezelfde fout verschijnt anders in elk hulpmiddel. Dit zijn de berichten om in je logs te zoeken:

  • Python requests / httpx: status_code == 429, vaak met Retry-After: 30
  • Scrapy: afgehandeld door RetryMiddleware, want 429 zit in de standaard RETRY_HTTP_CODES
  • curl: HTTP/2 429 gevolgd door retry-after: in de responsheaders
  • API's: een JSON-body zoals {"error": "rate_limited"}

Wat veroorzaakt a 429?

Waarschijnlijk eerst:

  • Te veel gelijktijdigheid per host. Vijftig parallelle workers op één domein lijken voor de meeste sites een aanval.
  • Geen pauze tussen verzoeken, of een vaste pauze die veel workers tegelijk laat versturen.
  • Herverzoeken zonder backoff. Een storm aan herhaalde verzoeken na de eerste 429 vermenigvuldigt de belasting.
  • Gedeelde limieten. Sommige sites tellen verzoeken per account, API-sleutel of sessie-cookie, niet per IP.
  • Zware eindpunten. Zoek- en filter-URL's hebben vaak strengere limieten dan statische pagina's.

Hoe diagnosticeer ik a 429 stap voor stap?

  1. Registreer de waarde van Retry-After en eventuele rate-limit headers bij de eerste 429.
  2. Meet je werkelijke verzoektempo per host, niet je totale tempo.
  3. Controleer of de limiet per IP, cookie of API-sleutel geldt: wijzig één tegelijk.
  4. Lees de API- of robots.txt documentatie van de site; een Crawl-delay-regel geeft het verlangde tempo aan.
Test de foutieve URL met curl (HTTP-poort, uitvoerig)
# 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

Hoe los ik a 429 op?

  • Respecteer Retry-After. Wacht minstens zolang als de server aangeeft.
  • Beperk gelijktijdigheid per host, niet alleen globaal. Scrapy heeft CONCURRENT_REQUESTS_PER_DOMAIN en AUTOTHROTTLE_ENABLED.
  • Pas exponentiële backoff toe met jitter: 1 s, 2 s, 4 s enzovoort, plus een willekeurig fractie, met een maximum.
  • Haal minder op. Cache responsen, stuur If-Modified-Since of If-None-Match, sla pagina's over die niet veranderden.
  • Gebruik de officiële API als de site die aanbiedt; de limieten zijn doorgaans gedocumenteerd.
Python: opnieuw proberen met Retry-After, exponentiële backoff en jitter
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))

Moet ik opnieuw proberen na a 429?

Ja, een 429 is bedoeld om later opnieuw geprobeerd te worden. Wacht op de Retry-After wachttijd als de server die meegeeft; anders gebruik je exponentiële backoff met jitter en een maximum. Tel opeenvolgende 429s per host en verlaag de gelijktijdigheid van die host als het aantal stijgt. De Python-functie hieronder doet het basisdeel.

Hoe geldt 429 Too Many Requests voor CrawlRelay?

Een 429 die je via CrawlRelay bereikt draagt de eigen headers en body van het doel: de limiet is die van de site en de pacing per host is jouw verantwoordelijkheid. Gebruik sticky sessions als een site verzoeken per sessie telt, zodat je tempo meetbaar blijft. Bekijk de concurrency guide voor startgetallen.

Gateway: gw.crawlrelay.com, poort 7777 (HTTP, HTTPS via CONNECT) en poort 7778 (SOCKS5). Gebruikersnaamformaat: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Gerelateerd: 403 Forbidden · 503 Service Unavailable · Concurrency guide.

429 Too Many Requests: vragen die ontwikkelaars stellen

Moet ik IP's rouleren om 429-fouten te vermijden?

Nee. Een 429 is het verzoek van de site om langzamer te gaan. Het verspreiden van hetzelfde verzoektempo over meer IP's om onder een per-IP limiet te blijven is ontwijking, en de meeste gebruiksvoorwaarden verbieden dit. Rotatie is nuttig voor load spread en locatie, niet om een limiet te overschrijden. Verlaag je tempo en cache wat je kunt.

Hoe lang moet ik wachten na een 429?

Wacht het aantal seconden in de Retry-After header, of tot de genoemde datum. Zonder header begin je op één of twee seconden en verdubbel je de wachttijd na elke nieuwe 429, met een extra willekeur en een maximum van circa een minuut. Hervat met een lager tempo, niet met het tempo dat de 429 veroorzaakte.

Waarom krijg ik 429 met maar een paar verzoeken per minuut?

De limiet kan per account, cookie of API-sleutel gelden in plaats van per IP, of het eindpunt kan zwaar zijn, zoals een zoekpagina. Sommige sites stellen ook lage limieten voor clients die ze als bots classificeren. Controleer de response headers en documentatie van de API en vraag de site om toegang als je meer nodig hebt.

Andere proxyfouten in deze referentie

HTTP-statuscodes

Browser- en clientfouten

Verbindings- en TLS-fouten

Residentiële proxy's met documentatie die de faalgevallen beschrijft

CrawlRelay residentiële proxy's van US$ 0,50/GB, verkeer dat nooit verloopt.

Vanaf US$ 0,50/GB · zonder KYC

Aan de slag