# 429 Too Many Requests lors du scraping : ce que cela signifie et comment le corriger

> Ce que signifie HTTP 429 Too Many Requests pour un scraper, comment lire Retry-After, et un code Python pour un backoff avec jitter. Ralentissez, ne cherchez pas à contourner.

- URL: https://crawlrelay.com/fr/docs/errors/429-too-many-requests/
- Dernière mise à jour: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Code d'état HTTP (4xx, erreur client) : message exact dans chaque outil, causes probables par ordre, et solution efficace.

**Réponse rapide — Que signifie 429 Too Many Requests avec un proxy ?**

**429 Too Many Requests** signifie que le site vous limite en taux : vous avez envoyé plus de requêtes qu'il n’en accepte dans une fenêtre temporelle. La solution est d’en envoyer moins, pas de masquer plus. Avec les proxys résidentiels CrawlRelay, respectez l’en-tête `Retry-After`, limitez la concurrence par hôte, et appliquez un backoff exponentiel avec jitter aléatoire. Faire tourner les IPs pour dépasser une limite publiée viole la plupart des conditions d’utilisation.

## 429 Too Many Requests en un coup d'œil

| Attribut | Valeur |
| --- | --- |
| Erreur | 429 Too Many Requests |
| Type | Code d'état HTTP (4xx, erreur client) |
| Envoyé par | Le site ciblé ou sa passerelle API |
| Défini dans | RFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3) |
| Réessayer ? | Oui, après le délai Retry-After ou un backoff exponentiel |
| Vérification initiale | Lisez l'en-tête Retry-After et le nombre de requêtes par seconde par hôte |

## Que signifie 429 Too Many Requests ?

La RFC 6585 a introduit le code 429 pour la limitation en taux. Le serveur peut ajouter un en-tête `Retry-After`, soit un nombre de secondes, soit une date HTTP, pour indiquer quand revenir. Les API ajoutent souvent leurs propres en-têtes comme `X-RateLimit-Remaining`.

Un 429 est la réponse la plus polie qu’un site puisse donner à un scraper. Il indique que le contenu est disponible, mais pas à votre cadence actuelle. Les sites voyant leurs 429 ignorés passent souvent aux 403, CAPTCHAs ou blocages permanents.

## À quoi ressemble a 429 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 == 429`, souvent avec `Retry-After: 30`
- **Scrapy :** géré par `RetryMiddleware`, le 429 étant dans le `RETRY_HTTP_CODES` par défaut
- **curl :** `HTTP/2 429` suivi de `retry-after:` dans les en-têtes de réponse
- **APIs :** un corps JSON comme `{"error": "rate_limited"}`

## Quelles sont les causes de a 429 ?

Probablement en premier lieu :

- **Trop de concurrence par hôte.** Cinquante workers parallèles sur un même domaine ressemblent à une attaque pour la plupart des sites.
- **Pas de délai entre les requêtes**, ou un délai fixe qui aligne plusieurs workers au même instant.
- **Reprises sans backoff.** Une tempête de reprises juste après un premier 429 multiplie la charge.
- **Limites partagées.** Certains sites comptent les requêtes par compte, par clé API ou par cookie de session, pas par IP.
- **Endpoints lourds.** Les URLs de recherche et filtre ont souvent des limites plus strictes que les pages statiques.

## Comment diagnostiquer a 429 étape par étape ?

1. Enregistrez la valeur `Retry-After` et tous les en-têtes de limitation lors du premier 429.
2. Mesurez votre vrai taux de requêtes par hôte, pas le taux global.
3. Vérifiez si la limite se base sur l’IP, le cookie ou la clé API : changez un élément à la fois.
4. Lisez la doc de l’API ou robots.txt ; une ligne `Crawl-delay` indique la cadence demandée.

*Tester l'URL en échec avec curl (port HTTP, mode verbeux)*

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

## Comment résoudre a 429 ?

- **Respectez Retry-After.** Attendez au moins le temps indiqué par le serveur.
- **Limitez la concurrence par hôte**, pas seulement globalement. Scrapy propose `CONCURRENT_REQUESTS_PER_DOMAIN` et `AUTOTHROTTLE_ENABLED`.
- **Backoff exponentiel avec jitter** : 1 s, 2 s, 4 s, etc., plus une fraction aléatoire, plafonné.
- **Réduisez la quantité.** Mettez en cache, envoyez `If-Modified-Since` ou `If-None-Match`, et ignorez les pages inchangées.
- **Utilisez l’API officielle** si le site en propose une ; ses limites sont généralement documentées.

*Python : réessayer avec Retry-After, backoff exponentiel et 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))
```

## Dois-je réessayer après a 429 ?

Oui, un 429 doit être retenté plus tard. Attendez le délai `Retry-After` si le serveur l’envoie ; sinon, appliquez un backoff exponentiel avec jitter et plafond. Comptez les 429 consécutifs par hôte et diminuez la concurrence de l’hôte à mesure qu’ils s’accumulent. La fonction Python ci-dessous gère la base.

## Quelle est l'incidence de 429 Too Many Requests sur CrawlRelay ?

Un 429 reçu via CrawlRelay conserve les en-têtes et le corps du site cible : la limite est celle du site, et la gestion du rythme par hôte est votre responsabilité. Utilisez des sessions stables quand un site compte les requêtes par session, ainsi votre rythme reste mesurable ; consultez le [guide de la concurrence](https://crawlrelay.com/fr/docs/concurrency/) pour des nombres de référence.

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 : [403 Forbidden](https://crawlrelay.com/fr/docs/errors/403-forbidden/) · [503 Service Unavailable](https://crawlrelay.com/fr/docs/errors/503-service-unavailable/) · [Guide de la concurrence](https://crawlrelay.com/fr/docs/concurrency/).

## 429 Too Many Requests : questions fréquentes des développeurs

### Dois-je faire tourner les IPs pour éviter les erreurs 429 ?

Non. Un 429 est une demande du site pour ralentir. Répartir le même taux de requêtes sur plusieurs IP pour rester sous une limite par IP est une contournement, interdit par la plupart des conditions. La rotation sert à répartir la charge et gérer le lieu, pas à dépasser une limite publiée. Baissez votre taux et mettez en cache ce que vous pouvez.

### Combien de temps dois-je attendre après un 429 ?

Attendez le nombre de secondes indiqué dans l’en-tête `Retry-After`, ou jusqu’à la date indiquée. Sans cet en-tête, commencez à 1 ou 2 secondes et doublez le délai après chaque nouveau 429, avec un supplément aléatoire et un plafond d’environ une minute. Reprenez à un rythme plus bas, pas à celui qui a causé le 429.

### Pourquoi ai-je un 429 alors que je fais seulement quelques requêtes par minute ?

La limite peut être par compte, cookie ou clé API plutôt que par IP, ou l’endpoint peut être coûteux, comme une page de recherche. Certains sites imposent aussi des limites basses aux clients classés comme bots. Vérifiez les en-têtes de réponse et la doc API, et demandez l’accès au site si besoin.

## Autres erreurs de proxy dans cette référence

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

**Proxies résidentiels avec documentation couvrant les cas de défaillance** Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration. [Voir les tarifs](https://crawlrelay.com/fr/pricing/) · [Démarrage rapide](https://crawlrelay.com/fr/docs/)

---

CrawlRelay: CrawlRelay est un service de proxy résidentiel rotatif et proxy mobile 4G/5G pour développeurs, adapté aux scrapers et pipelines de données IA : trafic prépayé sans expiration à partir de 0,50 $US/GB, paiement en crypto, sans téléchargement d’ID. Sans KYC — pas d’ID, pas de selfie, pas de documents. Payer en crypto.
