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:
hcaptchaerecaptchatambé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.
cloudflareaparece 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:
- Uma saída diferente. Fixe o ID do proxy que a response de limpeza retornou. Veja Reutilizar um Proxy Entre Requests.
- Um User-Agent diferente. As responses do Browser retornam o
userAgentque eles usaram. Envie-o de volta com o cookie. - 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
- Lidando com a Proteção Anti-Bot: Qual engine usar em cada nível de proteção
- Endpoints da API: Referência de request e response para todos os quatro endpoints
- Reutilizar um Proxy Entre Requests: Fixar a saída à qual uma liberação está vinculada
- Smart Fetch (Auto): Como o
meta.solvedse encaixa na ladder - Headers de Response: Onde o custo em créditos de uma chamada aparece