# 429 Too Many Requests ao raspagem: o que significa e como corrigir

> O que HTTP 429 Too Many Requests significa para um scraper, como ler Retry-After e código Python para backoff com jitter. Diminua a velocidade, não escape.

- URL: https://crawlrelay.com/pt/docs/errors/429-too-many-requests/
- Última atualização: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

Código de status HTTP (4xx, erro do cliente): a mensagem exata em cada ferramenta, as causas prováveis em ordem, e o conserto que funciona.

**Resposta rápida — O que 429 Too Many Requests significa com um proxy?**

**429 Too Many Requests** significa que o site está limitando sua taxa: você enviou mais requisições do que aceitam por janela de tempo. A solução é enviar menos, não esconder mais. Com proxies residenciais CrawlRelay, respeite o cabeçalho `Retry-After`, limite a concorrência por host e faça backoff exponencial com jitter aleatório. Rotacionar IPs para exceder limites publicados quebra a maioria dos termos de uso.

## 429 Too Many Requests de relance

| Atributo | Valor |
| --- | --- |
| Erro | 429 Too Many Requests |
| Tipo | Código de status HTTP (4xx, erro do cliente) |
| Enviado por | O site alvo ou seu gateway de API |
| Definido em | RFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3) |
| Tentar novamente? | Sim, após o intervalo Retry-After ou um backoff exponencial |
| Primeira verificação | Leia o cabeçalho Retry-After e suas requisições por segundo por host |

## O que 429 Too Many Requests significa?

RFC 6585 introduziu 429 para limitação de taxa. O servidor pode adicionar um cabeçalho `Retry-After`, seja um número de segundos ou uma data HTTP, dizendo quando voltar. APIs adicionam cabeçalhos próprios, por exemplo `X-RateLimit-Remaining`.

Um 429 é a resposta mais educada que um site pode dar a um scraper. Indica que o conteúdo está disponível, só não na velocidade atual. Sites que ignoram seus 429 normalmente escalam para 403, CAPTCHAs ou bloqueios permanentes.

## Como a 429 aparece em Python, curl, Node.js e navegadores?

A mesma falha aparece de forma diferente em cada ferramenta. Estas são as mensagens para buscar nos seus logs:

- **Python requests / httpx:** `status_code == 429`, frequentemente com `Retry-After: 30`
- **Scrapy:** tratado por `RetryMiddleware`, pois 429 está no padrão `RETRY_HTTP_CODES`
- **curl:** `HTTP/2 429` seguido por `retry-after:` nos cabeçalhos da resposta
- **APIs:** corpo JSON como `{"error": "rate_limited"}`

## O que causa a 429?

Mais provável inicialmente:

- **Concorrência alta por host.** Cinquenta trabalhadores paralelos num domínio parecem ataque para a maioria dos sites.
- **Sem atraso entre requisições**, ou atraso fixo que sincroniza muitos trabalhadores no mesmo instante.
- **Repetições sem backoff.** Uma tempestade de tentativas após o primeiro 429 multiplica a carga.
- **Limites compartilhados.** Alguns sites contam requisições por conta, chave de API ou cookie de sessão, não por IP.
- **Pontos finais pesados.** URLs de busca e filtro geralmente têm limites mais rígidos que páginas estáticas.

## Como diagnosticar a 429 passo a passo?

1. Registre o valor de `Retry-After` e quaisquer cabeçalhos de limitação de taxa no primeiro 429.
2. Meça sua taxa real de requisições por host, não a total.
3. Verifique se o limite segue o IP, cookie ou chave API: altere um por vez.
4. Leia a documentação da API ou robots.txt do site; uma linha `Crawl-delay` indica o ritmo esperado.

*Teste a URL com erro usando curl (porta HTTP, modo verbose)*

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

## Como corrigir a 429?

- **Respeite Retry-After.** Aguarde ao menos o tempo pedido pelo servidor.
- **Limite a concorrência por host**, não só globalmente. Scrapy tem `CONCURRENT_REQUESTS_PER_DOMAIN` e `AUTOTHROTTLE_ENABLED`.
- **Backoff exponencial com jitter:** 1 s, 2 s, 4 s etc., mais uma fração aleatória, com limite máximo.
- **Busque menos.** Cache respostas, envie `If-Modified-Since` ou `If-None-Match`, pule páginas sem alteração.
- **Use a API oficial** quando o site oferecer; limites geralmente documentados.

*Python: tentar novamente com Retry-After, backoff exponencial e 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))
```

## Devo tentar novamente após a 429?

Sim, 429 deve ser refeito depois. Aguarde o intervalo `Retry-After` se o servidor enviar; senão use backoff exponencial com jitter e limite. Conte 429 consecutivos por host e reduza a concorrência quando aumentar. A função Python abaixo faz o básico.

## Como 429 Too Many Requests se aplica ao CrawlRelay?

Um 429 passado via CrawlRelay carrega cabeçalhos e corpo do alvo: o limite é do site, .a dosagem por host é sua tarefa. Use sessões sticky se o site contar requisições por sessão, para manter seu ritmo mensurável; veja o [guia de concorrência](https://crawlrelay.com/pt/docs/concurrency/) para números iniciais.

Gateway: `gw.crawlrelay.com`, porta 7777 (HTTP, HTTPS via CONNECT) e porta 7778 (SOCKS5). Formato do usuário: `USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}`. Relacionado: [403 Forbidden](https://crawlrelay.com/pt/docs/errors/403-forbidden/) · [503 Service Unavailable](https://crawlrelay.com/pt/docs/errors/503-service-unavailable/) · [Guia de concorrência](https://crawlrelay.com/pt/docs/concurrency/).

## 429 Too Many Requests: perguntas que desenvolvedores fazem

### Devo rotacionar IPs para evitar 429?

Não. Um 429 é pedido do site para desacelerar. Espalhar a mesma taxa por mais IPs para driblar limites por IP é evasão, proibida por maioria dos termos de uso. Rotação serve para distribuir carga e localização, não para exceder limites publicados. Reduza sua taxa e use cache.

### Quanto tempo devo esperar após um 429?

Espere o número de segundos no cabeçalho `Retry-After`, ou até a data indicada. Sem cabeçalho, comece com um ou dois segundos e dobre o tempo após cada novo 429, com um extra aleatório e limite próximo a um minuto. Retome com taxa menor, não com a que causou o 429.

### Por que recebo 429 com poucas requisições por minuto?

O limite pode ser por conta, cookie ou chave API, não por IP, ou o ponto final pode ser custoso, como página de busca. Alguns sites aplicam limites baixos a clientes classificados como bots. Verifique cabeçalhos de resposta, documentação API e peça acesso ao site se precisar de mais.

## Outros erros de proxy nesta referência

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

**Proxies residenciais com documentação que cobre os casos de falha** CrawlRelay proxies residenciais a partir de US$ 0,50/GB, tráfego que nunca expira. [Veja os preços](https://crawlrelay.com/pt/pricing/) · [Início rápido](https://crawlrelay.com/pt/docs/)

---

CrawlRelay: CrawlRelay é um serviço proxy residencial rotativo e proxies móveis 4G/5G para desenvolvedores, para scrapers e pipelines de dados de IA: tráfego pay-as-you-go que não expira a partir de US$ 0,50/GB, pago com cripto, sem upload de documento. Sem KYC — sem ID, sem selfie, sem documentos. Pague com cripto.
