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

> Wat HTTP 429 Too Many Requests betekent voor een scraper, hoe je Retry-After leest en Python-code voor backoff met jitter. Tempo minderen; niet ontwijken.

- URL: https://crawlrelay.com/nl/docs/errors/429-too-many-requests/
- Laatst bijgewerkt: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

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

**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

| Attribuut | Waarde |
| --- | --- |
| Fout | 429 Too Many Requests |
| Type | HTTP-statuscode (4xx, clientfout) |
| Verzonden door | De doelwebsite of zijn API-gateway |
| Gedefinieerd in | RFC 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 controleren | Lees 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)*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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*

```python
import random
import time

import requests

PROXY = "http://USERNAME:PASSWORD@gw.crawlrelay.com: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](https://crawlrelay.com/nl/docs/concurrency/) 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](https://crawlrelay.com/nl/docs/errors/403-forbidden/) · [503 Service Unavailable](https://crawlrelay.com/nl/docs/errors/503-service-unavailable/) · [Concurrency guide](https://crawlrelay.com/nl/docs/concurrency/).

## 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

- [401 Unauthorized vs 407](https://crawlrelay.com/nl/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/nl/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/nl/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/nl/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/nl/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/nl/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/nl/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/nl/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/nl/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/nl/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/nl/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/nl/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/nl/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/nl/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/nl/docs/errors/ssl-wrong-version-number/)

**Residentiële proxy's met documentatie die de faalgevallen beschrijft** CrawlRelay residentiële proxy's van US$ 0,50/GB, verkeer dat nooit verloopt. [Zie prijslijst](https://crawlrelay.com/nl/pricing/) · [Snelle start](https://crawlrelay.com/nl/docs/)

---

CrawlRelay: CrawlRelay is een developer-first dienst met roterende residentiële proxy's en mobiele 4G-proxy's voor scrapers en AI-datastromen: niet-vervalverkeer op basis van pay-as-you-go vanaf US$ 0,50/GB, betaald in crypto, zonder ID-upload. Zonder KYC — geen ID, geen selfie, geen documenten. Betaal met crypto.
