Defesas Anti-Bot

Quando um alvo executa uma verificação de bot no caminho para a página que você solicitou, o FourA avisa você. Cada request que encontra um retorna com um campo nomeando o sistema, se a verificação foi superada e (em caso de sucesso) a autorização que você pode reproduzir para que a próxima chamada a ignore.

Esta página é a referência para esses campos. Para estratégia, consulte Handling Anti-Bot Protection.

Onde o Campo Fica

Endpoint Campo Presente quando
POST /api/single/ defense (object) Uma verificação de bot foi reconhecida na response
POST /api/proxy/ defense (object) O mesmo, relatado pela tentativa que respondeu
POST /api/browser/ defenseSolved (boolean) e defenses (object) Uma verificação de bot foi reconhecida durante o carregamento da página
POST /api/auto/ meta.solved (boolean) Sempre. true quando uma verificação foi superada em algum ponto da cadeia.

A ausência significa que nada foi reconhecido. Não interprete um defense ausente como uma falha.

O relatório precisa do unblocker, que está ativado por padrão. Com o unblocker: false você pediu a página exatamente como ela chegou, então o Single devolve o desafio intocado e o Browser o renderiza sem resolver.

defense no Single e Proxy

{
  "status": 200,
  "data": "<!doctype html>...",
  "total_time": 3.61,
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "ms": 3412,
    "hashes": 1048576,
    "complexity": 20,
    "cookie": "_I_=<clearance>"
  }
}
Campo Tipo Descrição
vendor string O sistema ao qual este registro se refere: aquele que foi resolvido, ou o principal encontrado. Veja a lista de fornecedores abaixo.
solved boolean true significa que a verificação foi resolvida e data é a página real. false significa que data pode ser a página de desafio.
present string[] Todos os sistemas reconhecidos nesta response. Pode conter mais nomes do que vendor, e pode conter nomes que ninguém resolve ainda.
ms number Milissegundos gastos para resolver a verificação. Apenas em um sucesso.
hashes number Quanto trabalho computacional o desafio solicitou. Apenas em um sucesso.
complexity number A dificuldade declarada pelo desafio. Apenas em um sucesso, e apenas onde o desafio informa uma.
answers number Quantas respostas aceitas foram fornecidas, para desafios que pedem várias em vez de uma. Apenas em um sucesso.
cookie string A liberação que o sucesso obteve, pronta para ser executada novamente. Apenas em um sucesso.

solved: false é o caso que vale a pena desviar. O FourA nunca apresenta um desafio não resolvido como conteúdo, então a flag é o seu sinal de que o body precisa de escalonamento em vez de análise.

defenses no Browser

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
Campo Tipo Descrição
defenseSolved boolean true quando um sistema é encontrado durante o carregamento e sua autorização é mantida na página final. Esta é a flag que decide se a chamada custa 15 ou 30 créditos.
defenses.present string[] Todo sistema reconhecido em qualquer momento durante o carregamento da página, não apenas na response final. Uma verificação é algo que aconteceu, e quando a página real chega, a response do desafio já se foi há muito tempo.
defenses.cleared string[] Os sistemas cuja autorização a página final detém.

Um nome em present que nunca chega a cleared é um sistema que a FourA consegue reconhecer, mas ainda não consegue contornar. Eles nunca aumentam o preço de uma chamada.

Fornecedores

Valor vendor O sistema
cloudflare Desafios e gerenciamento de bots da Cloudflare
sgcaptcha Verificação de site da SiteGround
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf Desafio do AWS WAF
ebay-splashui Desafio próprio do eBay
hcaptcha hCaptcha
recaptcha reCAPTCHA

O Que É Resolvido Hoje

Endpoint Resolve
Single, Proxy sgcaptcha, ebay-splashui. Ambos são computacionais em vez de visuais, então nenhum browser está envolvido.
Browser cloudflare, sgcaptcha

Todo o resto da lista é reconhecido e reportado, e nada mais. Essa divisão muda à medida que a FourA aprende a resolver mais deles, então leia solved em vez de assumir por esta tabela.

Duas notas sobre os casos extremos:

  • hcaptcha e recaptcha também são widgets de formulário comuns. Eles só são reportados quando a response realmente bloqueou você (403, 429 ou 503), portanto uma página de checkout com um campo de captcha em um formulário não reporta uma defesa.
  • Estar atrás da Cloudflare não é uma defesa. cloudflare aparece quando há um desafio real ou artefato de gerenciamento de bots na response, não porque um site usa a Cloudflare.

Reexecutando uma Autorização

defense.cookie é o objetivo principal do campo. Uma autorização é vinculada à saída que a conquistou e ao User-Agent que a conquistou, então reexecute-a através do mesmo par e a verificação não será executada novamente.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
    "maxTries": 5,
    "request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()

defense = first.get("defense", {})
if defense.get("solved"):
    clearance = defense["cookie"]
    exit_id = first["proxy"]

    # 2) Follow-up pages skip the check: same exit, same clearance.
    for page in range(2, 6):
        r = requests.post(f"{API}/api/single/", headers=H, json={
            "method": "GET",
            "url": f"https://example.com/catalog?page={page}",
            "proxy": exit_id,
            "headers": [["Cookie", clearance]],
        }).json()
        print(page, r["status"])

A primeira chamada carrega o custo da limpeza (clear). Cada replay é uma request comum pelo preço comum.

Três coisas quebram um replay:

  1. Uma saída diferente. Fixe o ID do proxy que a response de limpeza retornou. Veja Reutilizar um Proxy Entre Requests.
  2. Um User-Agent diferente. As responses do Browser retornam o userAgent que eles usaram. Envie-o de volta com o cookie.
  3. Expiração. As autorizações (clearances) têm tempos de vida próprios, definidos pelo alvo. A do SiteGround dura cerca de 30 dias para o site inteiro; a do Cloudflare geralmente é muito mais curta. Trate uma autorização como um cache: quando os replays começarem a retornar desafios novamente, execute uma nova chamada e pegue a nova.

Quanto Custa

Uma verificação resolvida (cleared) altera o preço apenas no Browser:

Engine Base Defesa resolvida
Single 1 (2 com unblocker) Sem alteração
Proxy 5 (10 com unblocker) Sem alteração
Browser 15 30

O Browser cobra 30 apenas quando o solver estava ativado e um sistema foi genuinamente resolvido. Um sistema que foi reconhecido e não resolvido custa 15, o mesmo que uma página sem nenhuma verificação.

Combine Com validate

defense diz a você que uma verificação foi encontrada. validate diz à FourA como a página real se parece, o que permite que uma request falhe em vez de entregar a você um intersticial que por acaso carrega um HTTP 200.

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

No POST /api/auto/, o validate é o que impede a ladder de aceitar uma página de desafio e dar o processo como concluído.

Relacionados

Atualizado em: 12 de agosto de 2026