Sites protegidos

Sites modernos usam detecção avançada de bots. Este guia explica como o FourA obtém a página em sites que verificam a origem da requisição e como aumentar sua taxa de sucesso.

Como funciona a detecção de bots

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

  • Reputação de IP: data centers e endereços de proxy conhecidos são bloqueados
  • Fingerprinting de conexão: cada cliente HTTP tem uma assinatura de handshake exclusiva que os sites podem detectar
  • Fingerprinting de navegador: o JavaScript verifica indicadores de navegador headless
  • Análise comportamental: padrões de requisição, timing e fluxo de navegação
  • Páginas de verificação: uma tarefa visual que o visitante deve concluir

A resposta informa o sistema que executou uma verificação; Verificações de sites lista todos eles.

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 escala que prioriza o custo (um proxy rotativo, depois um navegador via proxy; com forceProxy: false, uma sonda direta econômica e uma renderização direta de navegador vêm primeiro) e para no primeiro nível que retornar uma resposta aceita pelas suas regras. Em chamadas repetidas para o mesmo host, uma sessão ativa é reutilizada, tornando o segundo acesso mais econômico.

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"]}}
  }'

O Auto reconhece as páginas de desafio comuns e continua avançando quando encontra uma. Sua string validate.data.accept captura o restante: uma página de verificação desconhecida, uma barreira de login ou uma página sem o conteúdo de que você precisa. Consulte o guia do Smart Fetch para obter o passo a passo completo.

Como o FourA Ajuda em Cada Camada

Requests Realistas no Nível da Conexão

O endpoint único (POST /api/single/) emite características de handshake que correspondem a um navegador real. Os sites respondem a ele da mesma forma que respondem a um navegador, sem a sobrecarga de executar um.

Ative unblocker para também injetar headers de navegador realistas (User-Agent, Sec-Ch-Ua, Sec-Fetch-*, Accept-Encoding). unblocker fica 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 em Navegador Real

O endpoint de navegador (POST /api/browser/) executa uma instância completa do navegador Chrome. Ele executa o JavaScript da página da mesma forma que o navegador de um visitante. O unblocker no Browser conclui as verificações solicitadas pela página antes do carregamento (Turnstile e proteções semelhantes); mantenha-o ativado, a menos que você queira receber a página de desafio original.

Rotação de Proxy

O endpoint de proxy (POST /api/proxy/) faz a rotação automática entre proxies residenciais e de data center. Se um IP for bloqueado, a próxima tentativa usará outro diferente. Use ignoreProxies em uma chamada seguinte para ignorar saídas já utilizadas; use maxTries (padrão 5, máximo 90) para controlar a quantidade de tentativas.

Saídas com Escopo por País

Passe exitCountries em /api/proxy/ para restringir a seleção a proxies cujo país visível no destino corresponda a uma lista de permissões estrita. Os valores são códigos de duas letras (["CZ", "GB"]), sem espaços extras, em maiúsculas e sem duplicatas. O FourA nunca recorre a um país não solicitado; se o pool atual não tiver correspondência, a resposta retornará code: "no_eligible_proxy" com o escopo normalizado em details.exitCountries para que você possa tentar novamente mais tarde sem flexibilizar o requisito. O escopo por país está incluído a partir do plano Startup. Em um plano sem esse recurso, uma chamada que enviar exitCountries será recusada com 403 e X-FourA-Limit: plan_limit_feature.

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 response inclui exitCountry quando o escopo foi solicitado. Verifique se ela pertence à sua allowlist antes de confiar no payload e, em seguida, reutilize o ID de proxy retornado em qualquer chamada de Browser seguinte para que a renderização de JavaScript ocorra pela mesma saída.

O FourA informa o que bloqueou você

Você não precisa adivinhar qual sistema bloqueou uma request. Quando um destino executa uma verificação de bot, a response informa o nome dele.

  • POST /api/single/ e POST /api/proxy/ retornam um objeto defense: defense.vendor é o sistema, defense.solved informa se a verificação foi liberada e defense.present lista tudo o que foi reconhecido nessa response.
  • POST /api/browser/ retorna defenseSolved além de 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 body pode ser o desafio, não a página. O FourA nunca apresenta uma página de desafio como conteúdo, portanto verifique a flag antes de fazer o parsing.
  2. Uma resolução entrega 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 as requests seguintes ignorarão a verificação completamente.

O FourA reconhece os sistemas de verificação comuns, incluindo as verificações proprietárias de eBay, Reddit, Amazon e Google Search. Reconhecer é mais amplo do que liberar: um sistema que podemos nomear mas não liberar é reportado e nunca aumenta o custo da request. Quando a página retornada for a página de verificação desse sistema, mesmo com HTTP 200, a request não é faturada e o header X-FourA-Check-Page a identifica. Consulte Verificações de sites para ver 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 uma sondagem econômica primeiro e só escala até onde o alvo exigir, para que você pague pela descoberta uma única vez por host.

Proteção Baixa (maioria dos sites)

Use o endpoint único com unblocker. A correspondência em nível de 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}'

Médio: uma página de desafio ou um firewall básico

Use o endpoint de navegador para passar por desafios de 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: verificações de comportamento e fingerprint

Use o endpoint de proxy com múltiplas tentativas de retry:

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 páginas de desafio encadeadas ("Just a moment", uma verificação de segurança) onde você precisa da página renderizada após o desafio ser concluído, consulte as MCP Recipes. A receita "Protected page: proxy first, browser when JavaScript is needed" mostra exatamente a transição de proxy para browser.

Best Practices

  1. Comece com auto para alvos desconhecidos. Passe uma regra validate, deixe a escala escolher a opção mais econômica e leia meta.rung na resposta para ver qual engine funcionou. Quando souber, chame esse engine diretamente para tráfego repetido.

  2. Reutilize a sessão bem-sucedida. Após uma chamada auto, o session retornado (ID do proxy + cookies + userAgent) pode ser reutilizado via /api/single/ ou /api/browser/ para páginas subsequentes no mesmo host, pelo preço do próprio endpoint: 2 créditos no Single com unblocker, 5 no Browser (10 para uma página interativa).

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

  4. Mantenha unblocker ativado. No Single e Proxy, unblocker: true (o padrão) envia uma assinatura de navegador e headers realistas. No Browser, ele ativa o resolvedor de desafios. Desative-o apenas quando 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 de destino atualizou sua proteção.

  6. Ignore saídas queimadas. Se uma chamada /api/proxy/ ou /api/auto/ retornou um ID de proxy que começou a falhar, envie-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 indica se vale a pena tentar um perfil de navegador diferente, se você precisa de uma renderização completa ou se a verificação é algo que ninguém resolve sem um serviço de resolução.

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

Limites

Alguns cenários exigem tratamento adicional fora da API:

  • Conteúdo protegido por login: o FourA não gerencia logins persistentes para você. O endpoint do browser aceita cookies por request; inclua seus próprios cookies de sessão.
  • Tarefas de verificação interativas: o FourA reconhece verificações visuais e as reporta em defense.present, mas não as resolve. O Turnstile é gerenciado pelo Browser.
  • Conteúdo restrito a determinados países: use exitCountries no /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 por país, determinados serviços governamentais) ainda podem bloquear saídas residenciais genéricas; a request retorna no_eligible_proxy quando o pool atual não possui uma saída correspondente.
  • Sites com restrições legais: certifique-se sempre de que sua coleta de dados esteja em conformidade com os termos de serviço do site de destino e com as leis aplicáveis.

Próximos Passos

Atualizado em: 27 de setembro de 2026