Senza KYC — niente documento, selfie o altri documenti. Paga in crypto: BTC, USDT, USDC, ETH, SOL, LTC
Lingua: Italiano
Inizia ora

Riferimento errori proxy · Codici di stato HTTP

429 Too Many Requests quando fai scraping: cosa significa e come risolverlo

Codice di stato HTTP (4xx, errore client): il messaggio esatto in ogni strumento, le cause probabili in ordine e la soluzione che funziona.

Ultimo aggiornamento: · 5 minuti di lettura

Risposta rapida

Cosa significa 429 Too Many Requests con un proxy?

429 Too Many Requests significa che il sito applica un limite di frequenza: hai inviato più richieste di quante ne accetta in una finestra temporale. La soluzione è inviare meno, non nascondersi di più. Con i proxy residenziali di CrawlRelay, rispetta l'intestazione Retry-After, limita la concorrenza per host e applica un backoff esponenziale con jitter casuale. Ruotare IP per superare i limiti pubblicati viola la maggior parte dei termini di utilizzo.

429 Too Many Requests a colpo d'occhio

Errore429 Too Many Requests
TipoCodice di stato HTTP (4xx, errore client)
Inviato daIl sito web target o il suo gateway API
Definito inRFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3)
Riprovarlo?Sì, dopo il ritardo Retry-After o un backoff esponenziale
Prima verificaLeggi l'intestazione Retry-After e le tue richieste al secondo per host

Cosa significa 429 Too Many Requests?

RFC 6585 ha introdotto il 429 per il rate limiting. Il server può aggiungere un'intestazione Retry-After, numero di secondi o una data HTTP, per indicare quando tornare. Le API spesso aggiungono anche proprie intestazioni come X-RateLimit-Remaining.

Un 429 è la risposta più garbata che un sito possa dare a uno scraper. Dice che il contenuto è disponibile, solo non al tuo ritmo attuale. I siti che vedono ignorati i loro 429 di solito passano a 403, CAPTCHA o blocchi permanenti.

Com'è a 429 in Python, curl, Node.js e browser?

Lo stesso errore si presenta in modo diverso in ogni strumento. Questi sono i messaggi da cercare nei log:

  • Python requests / httpx: status_code == 429, spesso con Retry-After: 30
  • Scrapy: gestito da RetryMiddleware, visto che 429 è nel RETRY_HTTP_CODES di default
  • curl: HTTP/2 429 seguito da retry-after: negli header di risposta
  • API: un corpo JSON come {"error": "rate_limited"}

Cosa causa a 429?

Probabilmente prima:

  • Troppa concorrenza per host. Cinquanta worker paralleli su un dominio sembrano un attacco alla maggior parte dei siti.
  • Nessuna pausa tra le richieste, o una pausa fissa che allinea molti worker nello stesso istante.
  • Retry senza backoff. Uno storm di retry dopo il primo 429 moltiplica il carico.
  • Limiti condivisi. Alcuni siti contano le richieste per account, per chiave API o per cookie di sessione, non per IP.
  • Endpoint pesanti. URL di ricerca o filtro spesso hanno limiti più rigidi delle pagine statiche.

Come diagnostico a 429 passo dopo passo?

  1. Registra il valore Retry-After e i qualsiasi header di rate-limit al primo 429.
  2. Misura la tua reale frequenza di richieste per host, non la frequenza totale.
  3. Verifica se il limite segue IP, cookie o chiave API: cambia una cosa alla volta.
  4. Leggi la documentazione API o robots.txt del sito; una riga Crawl-delay indica il ritmo richiesto.
Testa l'URL che fallisce con curl (porta HTTP, verbose)
# 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

Come risolvo a 429?

  • Rispetta Retry-After. Aspetta almeno il tempo richiesto dal server.
  • Limita la concorrenza per host, non solo globale. Scrapy ha CONCURRENT_REQUESTS_PER_DOMAIN e AUTOTHROTTLE_ENABLED.
  • Backoff esponenziale con jitter: 1 s, 2 s, 4 s e così via, più una frazione casuale, con un limite massimo.
  • Preleva meno. Metti in cache le risposte, invia If-Modified-Since o If-None-Match, e salta le pagine non modificate.
  • Usa l'API ufficiale quando disponibile; i suoi limiti sono di solito documentati.
Python: riprova con Retry-After, backoff esponenziale e 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))

Devo riprovare dopo a 429?

Sì, un 429 va ritentato, più tardi. Aspetta il ritardo Retry-After se il server lo indica; altrimenti usa backoff esponenziale con jitter e un limite massimo. Conta i 429 consecutivi per host e riduci la concorrenza di quell'host quando cresce il conteggio. La funzione Python sotto fa la parte base.

Come si applica 429 Too Many Requests a CrawlRelay?

Un 429 che arriva tramite CrawlRelay riporta gli header e il corpo del target: il limite è del sito, e il controllo della frequenza per host è tuo compito. Usa sessioni sticky quando un sito conta le richieste per sessione, così il tuo ritmo resta misurabile, e vedi la guida alla concorrenza per i numeri da cui partire.

Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS tramite CONNECT) e porta 7778 (SOCKS5). Formato username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Correlato: 403 Forbidden · 503 Service Unavailable · Concurrency guide.

429 Too Many Requests: domande frequenti dagli sviluppatori

Devo ruotare gli IP per evitare errori 429?

No. Un 429 è la richiesta del sito di rallentare. Distribuire la stessa frequenza su più IP per restare sotto un limite per IP è evasione, e la maggior parte dei termini vieta questa pratica. La rotazione serve per distribuire il carico e per la localizzazione, non per superare un limite pubblicato. Abbassa la frequenza e metti in cache quello che puoi.

Quanto tempo devo aspettare dopo un 429?

Aspetta il numero di secondi indicato nell'intestazione Retry-After, o fino alla data indicata. Senza quell'intestazione, parti da uno o due secondi e raddoppia il ritardo dopo ogni nuovo 429, con un extra casuale e un limite di circa un minuto. Riprendi a frequenze inferiori, non a quelle che hanno causato il 429.

Perché ricevo 429 con poche richieste al minuto?

Il limite può essere per account, cookie o chiave API invece che per IP, o l'endpoint può essere pesante, come una pagina di ricerca. Alcuni siti impostano limiti bassi per clienti classificati come bot. Controlla gli header di risposta e la documentazione API, e chiedi accesso se ti serve di più.

Altri errori proxy in questo riferimento

Codici di stato HTTP

Errori del browser e client

Errori di connessione e TLS

Proxy residenziali con documentazione che copre i casi di errore

Proxy residenziali CrawlRelay da 0,50 USD/GB, traffico che non scade mai.

Da 0,50 USD/GB · senza KYC

Inizia ora