Lidando com proteção anti-bot

Sites modernos usam detecção avançada de bots. Este guia explica como a FourA lida com sistemas anti-bot e como maximizar sua taxa de sucesso.

Como a detecção de bots funciona

Os sites usam várias camadas de proteção:

  • Reputação de IP: Data centers e endereços de proxy conhecidos são bloqueados
  • Wire fingerprinting: Cada cliente HTTP possui uma assinatura de handshake única que os sites podem detectar
  • Browser fingerprinting: O JavaScript verifica indicadores de navegadores headless
  • Análise comportamental: Padrões de request, tempo e fluxo de navegação
  • CAPTCHAs: Desafios visuais como última linha de defesa

Provedores comuns de anti-bot incluem Cloudflare, DataDome, PerimeterX e Akamai Bot Manager.

Caminho mais rápido: Auto

Se você ainda não conhece o nível de proteção, chame /api/auto/ com uma substring validate.data.accept que apenas a página real contém. O Auto percorre uma escada consciente dos custos (sonda barata, proxy rotacionado, renderização no navegador, navegador via proxy) e para no primeiro degrau que retorna uma response que suas regras aceitam. Em chamadas repetidas para o mesmo host, uma sessão quente é reproduzida em vez disso, para que a segunda chamada seja barata.

curl -X POST https://eu.api.foura.ai/api/auto/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://protected-site.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
  }'

Sem o validate.data.accept, o auto não consegue distinguir um 200 real de um intersticial de desafio retornado com status 200 e pode retornar o desafio como sucesso. Consulte o guia do Smart Fetch para o tutorial completo.

Como a FourA ajuda em cada camada

Requisições realistas no nível da rede

O único endpoint (POST /api/single/) emite características de handshake que correspondem a um navegador real. Isso passa pelas verificações mais comuns no nível da rede sem a sobrecarga de executar um navegador completo.

Ative o unblocker para também injetar headers de navegador realistas (User-Agent, Sec-Ch-Ua, Sec-Fetch-*, Accept-Encoding). O unblocker está ativado por padrão; defina false apenas para enviar uma assinatura de cliente simples.

{
  "method": "GET",
  "url": "https://protected-site.com/data",
  "unblocker": true
}

Renderização de Navegador Real

O endpoint do navegador (POST /api/browser/) executa uma instância completa do navegador Chrome. Combinado com patches de antidetecção, ele passa pela maioria das verificações de fingerprint baseadas em JavaScript. unblocker no Browser aciona o resolvedor automático de defesas (aprovação do Turnstile e bloqueios semelhantes); deixe-o ativado, a menos que você queira a página de desafio original de volta.

Rotação de Proxy

O endpoint do proxy (POST /api/proxy/) alterna automaticamente entre proxies residenciais e de data center. Se um IP for bloqueado, a próxima tentativa usará um diferente. Use ignoreProxies em uma chamada subsequente para ignorar as saídas que você já esgotou; use maxTries (padrão 5, máximo 90) para controlar a intensidade do esforço.

Saídas com Escopo de País

Passe exitCountries em /api/proxy/ para restringir a seleção a proxies cujo país visível ao alvo corresponda a uma allowlist rigorosa. Os valores são códigos de duas letras (["CZ", "GB"]), aparados, em letras maiúsculas e deduplicados. A FourA nunca recorre a um país não solicitado; se o pool atual não tiver correspondência, a response retorna code: "no_eligible_proxy" com o escopo normalizado em details.exitCountries para que você possa tentar novamente mais tarde sem afrouxar o requisito.

curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 5,
    "exitCountries": ["CZ", "GB"],
    "request": {"method": "GET", "url": "https://target.example/pricing"}
  }'

A resposta inclui exitCountry quando o escopo foi solicitado. Verifique se ele pertence à sua allowlist antes de confiar no payload, depois reutilize o ID proxy retornado em qualquer chamada de Browser subsequente para que a renderização do JavaScript ocorra pela mesma saída.

O FourA informa o que bloqueou você

Você não precisa adivinhar qual sistema bloqueou uma requisição. Quando um alvo executa uma verificação de bot, a resposta o nomeia.

  • POST /api/single/ e POST /api/proxy/ retornam um objeto defense: defense.vendor é o sistema, defense.solved diz se a verificação foi aprovada, e defense.present lista tudo o que foi reconhecido nessa resposta.
  • POST /api/browser/ retorna defenseSolved mais defenses.present e defenses.cleared.
{
  "status": 200,
  "data": "<!doctype html>...",
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "cookie": "_I_=<clearance>"
  }
}

Duas regras decorrem disso:

  1. solved: false significa que o corpo pode ser o desafio, não a página. A FourA nunca apresenta um desafio não resolvido como conteúdo, portanto, verifique a flag antes de fazer o parsing.
  2. Uma solução concede a você a liberação. Quando defense.cookie estiver presente, envie-o de volta como um header Cookie na mesma saída com o mesmo User-Agent, e os requests subsequentes pularão a verificação completamente.

A FourA reconhece Cloudflare, SiteGround, DataDome, PerimeterX, Akamai, Incapsula, AWS WAF, hCaptcha, reCAPTCHA e o próprio desafio do eBay. Reconhecer é mais amplo do que liberar: um sistema que podemos nomear, mas não liberar, é reportado e nunca altera o que o request custa. Consulte Anti-Bot Defenses para obter todos os campos, a divisão atual entre liberar e detectar e um exemplo de replay.

Estratégia por Nível de Proteção

Proteção Desconhecida

Use auto. Ele faz testes baratos primeiro e só escala até onde o alvo o força, para que você pague pela descoberta apenas uma vez por host.

Proteção Baixa (maioria dos sites)

Use o endpoint único com unblocker. A correspondência no nível da rede é suficiente.

curl -X POST https://eu.api.foura.ai/api/single/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"method": "GET", "url": "https://news-site.com/article", "unblocker": true}'

Proteção Média (Cloudflare, WAF básico)

Use o endpoint do navegador para passar por desafios JavaScript:

curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://protected-site.com/data", "timeout_ms": 15000}'

Alta proteção (DataDome, PerimeterX)

Use o endpoint do proxy com múltiplas tentativas de repetição:

curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 10,
    "request": {
      "method": "GET",
      "url": "https://heavily-protected.com/prices",
      "unblocker": true
    }
  }'

Para desafios de WAF em cadeia (Cloudflare "Just a moment", Vercel Security Checkpoint, Akamai Bot Manager) onde você precisa da página renderizada após o desafio ser superado, consulte as Receitas de MCP. A receita "Página protegida: proxy primeiro, browser quando JavaScript é necessário" mostra exatamente a transição de proxy para browser.

Melhores Práticas

  1. Comece com auto para alvos desconhecidos. Passe uma regra validate, deixe a escada escolher o degrau mais barato e, em seguida, leia meta.rung na response para ver qual motor funcionou. Uma vez que você souber, chame esse motor diretamente para o tráfego repetido.

  2. Reutilize a sessão vencedora. Após uma chamada auto, a session retornada (proxy ID + cookies + userAgent) pode ser reproduzida através de /api/single/ ou /api/browser/ para páginas subsequentes no mesmo host, pelo preço do Single.

  3. Respeite os rate limits. Mesmo com a rotação de proxy, enviar centenas de requests por segundo para um único site acionará a detecção comportamental. Espace seus requests em pelo menos 1 a 2 segundos.

  4. Mantenha unblocker ativado. Para requests Single, Proxy e Browser, unblocker: true (o padrão) injeta headers de browser realistas automaticamente. Desative-o apenas quando você precisar especificamente de uma assinatura de cliente simples ou de uma página de desafio bruta.

  5. Monitore as taxas de sucesso. Verifique as métricas do Dashboard para acompanhar sua taxa de sucesso ao longo do tempo. Uma queda repentina geralmente significa que o site alvo atualizou sua proteção.

  6. Pule saídas queimadas. Se uma chamada /api/proxy/ ou /api/auto/ retornou um proxy ID que começou a falhar, passe-o em ignoreProxies na próxima chamada para que o FourA escolha uma saída diferente.

  7. Leia defense antes de tentar novamente. O nome do fornecedor informa se vale a pena tentar um perfil de browser diferente, se você precisa de uma renderização completa ou se a verificação é uma que ninguém passa sem um serviço de resolução.

  8. Mude o browser que você apresenta. Alguns alvos aceitam um browser e recusam outro. Defina browser, os ou version em Single e Proxy, e leia GET /api/profiles para o catálogo atual. Detalhes na referência do endpoint.

O que o FourA não consegue fazer bypass

Alguns cenários exigem tratamento adicional fora da API:

  • Conteúdo protegido por login: O FourA não gerencia logins de longa duração para você. O endpoint do navegador aceita cookies por request, carregue os seus cookies de sessão você mesmo.
  • CAPTCHAs interativos: reCAPTCHA e hCaptcha precisam de um serviço de resolução. O FourA reconhece ambos e os reporta em defense.present, mas não os resolve. O Turnstile é gerenciado pelo Browser.
  • Conteúdo com restrição geográfica: use exitCountries em /api/proxy/ para fixar a seleção nos países permitidos. Sites que também restringem por ISP ou ASN (algumas casas de apostas licenciadas no país, certos serviços governamentais) ainda podem bloquear saídas residenciais genéricas, o request retorna no_eligible_proxy quando o pool atual não tem uma saída correspondente.
  • Sites com restrições legais: Sempre certifique-se de que a sua coleta de dados está em conformidade com os termos de serviço do site de destino e as leis aplicáveis.

Próximos passos

Atualizado em: 12 de agosto de 2026