Correzione errore · 2 min di lettura

Come risolvere 429 Troppi Richieste durante lo scraping

Un 429 è un limite di velocità, non un divieto — il server ti sta chiedendo di rallentare. La soluzione durevole combina backoff, onorando Retry-After, e distribuendo il carico su un pool di IP. Ecco come, con Python funzionante.

429 è un limite di velocità, non un muro

HTTP 429 Troppi Richieste significa che hai inviato troppe richieste in un dato intervallo e il server ti sta limitando. È deliberatamente temporaneo — a differenza di un blocco duro, un 429 di solito si risolve una volta che rallenti. Molti server includono un Retry-After header che ti dice esattamente quanti secondi aspettare; rispettarlo è la soluzione più efficace, perché ti allinea con il limite del server invece di indovinare.

Ci sono due leve. La prima è tasso: invia meno richieste al secondo per IP, aggiungi ritardi, limita la concorrenza e allontanati in modo esponenziale quando appare un 429. La seconda è distribuzione: distribuisci le richieste su più IP in modo che ciascuno rimanga sotto il limite per IP. Il controllo del tasso è dove dovresti iniziare — un pool di proxy moltiplica il tuo throughput ma non giustifica il bombardamento di un sito. s4m fornisce proxy di data center autenticati (SOCKS5 1080, HTTP 3128, USER:PASS) per distribuire il carico, e questo si abbina direttamente con la guida alla rotazione dei proxy e scraping con richieste.

Rispetta Retry-After, allontanati, poi ruota

Un ciclo di fetch che rispetta Retry-After, si ritira esponenzialmente con jitter e si distribuisce su un pool di proxy. Sostituisci USER:PASS.

python
import random, time
import requests

USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
    f"socks5h://{USER}:{PASS}@{HOST}:1080",
    f"http://{USER}:{PASS}@{HOST}:3128",
]

def polite_get(url, max_tries=6):
    for attempt in range(1, max_tries + 1):
        proxy = random.choice(POOL)
        r = requests.get(url, proxies={"http": proxy, "https": proxy},
                         timeout=(5, 20))
        if r.status_code != 429:
            r.raise_for_status()
            return r

        # 429: prefer the server's Retry-After, else exponential backoff
        retry_after = r.headers.get("Retry-After")
        if retry_after and retry_after.isdigit():
            wait = int(retry_after)
        else:
            wait = min(2 ** attempt, 60) + random.random()  # cap + jitter

        print(f"[{attempt}/{max_tries}] 429; waiting {wait:.1f}s")
        time.sleep(wait)

    raise SystemExit(f"still rate-limited after {max_tries} tries")

# Global throttle: cap how fast you fire, independent of retries.
MIN_INTERVAL = 0.5  # seconds between requests per worker
_last = 0.0
def throttled_get(url):
    global _last
    delta = time.time() - _last
    if delta < MIN_INTERVAL:
        time.sleep(MIN_INTERVAL - delta)
    _last = time.time()
    return polite_get(url)

print(throttled_get("https://httpbin.org/status/200").status_code)

L'ordine per risolvere un 429

Le soluzioni più economiche e rispettose prima.

Onora Retry-After

Se la risposta 429 include un'intestazione Retry-After, attendi esattamente quel tempo prima di riprovare. È il server che ti informa del suo limite — seguirlo elimina la maggior parte dei 429 immediatamente.

Aggiungi il backoff esponenziale con jitter

Quando non c'è Retry-After, attendi 2, 4, 8… secondi (limitati) più un piccolo jitter casuale tra i tentativi, in modo da smettere di colpire e evitare tentativi sincronizzati.

Limita il tuo tasso di richiesta

Limita le richieste per secondo e la concorrenza in modo da rimanere sotto il limite in primo luogo. Un crawling costante e più lento termina in modo più affidabile rispetto a un picco che continua a essere limitato.

Distribuisci il carico tra gli IP

Una volta che il tuo comportamento per richiesta è educato, ruota attraverso un pool di proxy in modo che ogni IP rimanga sotto il limite per IP. Questo moltiplica il throughput sicuro senza aumentare la velocità su nessun singolo indirizzo.

Perché la rotazione da sola non è la risposta

È allettante trattare i proxy come un modo per ignorare i limiti di velocità: basta aggiungere più IP e continuare a inviare richieste. Questo si ritorce contro. Un sito che restituisce 429 sta monitorando i modelli di richiesta, e un'inondazione da un insieme variabile di indirizzi che colpiscono gli stessi endpoint nello stesso istante è essa stessa una firma rilevabile che porta a divieti severi. La rotazione moltiplica il throughput educato; non sostituisce la cortesia. Combina sempre un pool di proxy con un backoff, Retry-After, un ritmo realistico e una concorrenza sensata.

Onestamente, alcuni limiti devono essere rispettati: controlla se esiste un API ufficiale o un limite documentato prima di scalare intorno a un 429 e leggi i termini di ciascun sito. Quando hai bisogno di distribuzione, i proxy datacenter autenticati di s4m distribuiscono il carico e sono misurati, quindi allargare il pool è economico; per i dettagli vedi la guida alla rotazione. Ricorda che gli IP dei datacenter possono comunque essere segnalati in blocco, e la rotazione non fa nulla riguardo alle impronte digitali. Prototipa a basso costo con la lista di proxy gratuita e valida le uscite con gli strumenti.

FAQ

Domande, risposte

Un 429 è un divieto permanente?

No. HTTP 429 Troppi Richieste è un limite di frequenza temporaneo — di solito si risolve una volta che rallenti. Rispetta qualsiasi intestazione Retry-After, aggiungi un backoff e riduci il tuo tasso di richiesta, e l'accesso riprende tipicamente.

Qual è la soluzione più efficace per un 429?

Rispetta l'intestazione Retry-After quando il server ne invia una. Ti dice esattamente quanto tempo aspettare, così ti riallinei con il limite del server invece di indovinare e venire nuovamente limitato.

Le proxy rotanti fermeranno gli errori 429?

Aiuta mantenendo ogni IP sotto il limite per IP, ma solo insieme a backoff e throttling. La rotazione senza un ritmo educato produce un'inondazione rilevabile che porta a blocchi più severi, quindi combina i due.

I proxy s4m sono sufficienti per bypassare qualsiasi limite di velocità?

Nessun strumento onesto può promettere questo. I proxy dei datacenter s4m distribuiscono il carico tra gli IP, ma hai comunque bisogno di backoff e throttling, gli intervalli dei datacenter possono essere segnalati e alcuni limiti dovrebbero semplicemente essere rispettati tramite un'API ufficiale.

Distribuisci il carico in modo onesto

Combina il backoff e il throttling con proxy di datacenter autenticati su proxy.s4m.online per mantenere ogni IP sotto il limite. Pagamento a consumo, IP dedicato opzionale.

Le persone hanno trovato questa pagina cercando

Frasi di ricerca reali a cui questa pagina risponde — i collegamenti aprono la pagina che le tratta in dettaglio.