Você clica em um link e, antes do conteúdo aparecer, vê "Verificando seu navegador antes de continuar..." Isso é o desafio de página inteira da Cloudflare — não confunda com o Turnstile, o widget pequeno embutido na página. Aqui, a página inteira fica bloqueada até o navegador provar que não é automatizado.
Depois de aprovado, a Cloudflare grava um cookie de sessão (cookie_qa_validacao) que libera as requisições seguintes. Sem esse cookie — ou fora do contexto em que foi emitido — cada nova requisição volta a cair no mesmo desafio.
Desafio de página inteira vs Turnstile vs verificação silenciosa
| Característica | Desafio de página inteira | Turnstile | Verificação JS silenciosa |
|---|---|---|---|
| Tipo | Interstitial de página inteira | Widget na página | Verificação em segundo plano |
| O que o visitante vê | Página "Verificando seu navegador" | Caixa de seleção ou nada | Nada |
| Bloqueia o acesso à página | Sim | Não | Rapidamente |
| Grava cookie de verificação | Sim | Às vezes | Sim |
| Exige proxy para resolver via API | Sim | Não | N/A |
| Depende da CDN da Cloudflare | Sim, obrigatório | Opcional | Sim, obrigatório |
O que aciona o desafio da Cloudflare
| Gatilho | O que costuma acontecer |
|---|---|
| IP de datacenter | Requisição de provedor de hospedagem conhecido, não de IP residencial |
| Cabeçalhos ausentes | Cabeçalhos HTTP fora do padrão de um navegador real |
| Sinal de navegador (TLS) | JA3/JA4 combina com assinaturas de bot catalogadas |
| Taxa de requisição alta | Muitas requisições do mesmo IP em pouco tempo |
| Nível de segurança do site | Proprietário define o limite do desafio como alto |
| Regras por país | Bloqueio geográfico ou regra de desafio configurada |
| Pontuação de bot | Modelo de ML da Cloudflare atribui pontuação baixa |
| Lista de ameaças conhecida | IP aparece em lista de inteligência de ameaças |
Como o navegador passa pelo desafio
Request → Cloudflare proxy → Suspicious? → Challenge page
↓
Browser verification
↓
cookie_qa_validacao cookie set
↓
Original page loads
Disparado o gatilho, o fluxo segue seis etapas:
- Requisição interceptada — o proxy reverso da Cloudflare avalia a requisição antes de chegar à origem
- Avaliação de risco — reputação de IP, cabeçalhos, sinal de navegador (TLS) e comportamento entram na pontuação
- Página de verificação exibida — se o risco for alto, a Cloudflare substitui a resposta original
- Verificação executada no navegador — scripts confirmam que existe um navegador real por trás da requisição
- Cookie de sessão definido — aprovado o desafio, a Cloudflare grava
cookie_qa_validacaocom um TTL configurável - Acesso liberado — o navegador recarrega e recebe o conteúdo original
O cookie de verificação (cookie_qa_validacao)
Depois que o desafio é aprovado, o navegador recebe:
cookie_qa_validacao=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
Propriedades principais:
- Duração: de 15 minutos a 24 horas, definida pelo proprietário do site
- Escopo: vale só para o domínio específico onde foi emitido
- Vínculo: preso ao User-Agent e ao endereço IP usados durante a verificação
- Uso: precisa acompanhar todas as requisições seguintes, ou o desafio volta a aparecer
Atenção: o cookie
cookie_qa_validacaoestá vinculado ao User-Agent e ao endereço IP específicos usados na verificação. Mudar qualquer um dos dois invalida o cookie na hora.
Por que a automação via API exige proxy
A CaptchaAI resolve esse desafio, mas a resolução só funciona com proxy, porque o cookie de verificação está amarrado a três sinais:
- Endereço IP — usado na resolução
- User-Agent — precisa ser idêntico ao das requisições seguintes
- Handshake TLS — verificado em algumas configurações
Mudou qualquer um deles entre a resolução e a requisição seguinte, o cookie perde a validade.
Erro comum em QA autorizado no Brasil: usar proxy fora da região do resto do tráfego — por exemplo, workers em sa-east-1 resolvendo com proxy de outro continente. A diferença de latência já basta para acionar um novo desafio.
Boa prática: IP e User-Agent registrados nesse fluxo seguem a mesma política de retenção de logs dos demais dados de acesso — considere a LGPD.
Como resolver esse desafio com a API da CaptchaAI
Os exemplos enviam a tarefa com proxy obrigatório e fazem o polling do resultado — aqui o proxy não é opcional.
Python
A chamada de envio, seguida do polling em loop:
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "turnstile_staging",
"pageurl": "https://example.com/protected-page",
"proxy": "username:password@proxy.example.com:8080",
"proxytype": "HTTP",
"json": 1
})
task_id = response.json()["request"]
# Poll for result
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
solution = result["request"]
# solution contains cookie_qa_validacao cookie + user_agent
print(f"cookie_qa_validacao: {solution}")
break
Node.js
Equivalente em Node.js, com async/await:
const axios = require('axios');
async function solveCloudflareChallenge(pageurl, proxy) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: 'YOUR_API_KEY',
method: 'turnstile_staging',
pageurl,
proxy,
proxytype: 'HTTP',
json: 1
}
});
const taskId = data.request;
for (let i = 0; i < 60; i++) {
await new Promise(r => setTimeout(r, 5000));
const res = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (res.data.status === 1) return res.data.request;
}
throw new Error('Timeout');
}
Reaproveitando o cookie na sessão seguinte
Use o mesmo proxy e o mesmo user agent nas requisições reais — é essa combinação que mantém o cookie válido:
# After getting the solution
cookie_qa_validacao = solution["cookie_qa_validacao"]
user_agent = solution["user_agent"]
# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("cookie_qa_validacao", cookie_qa_validacao, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}
# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")
Perguntas frequentes
Por que esse desafio aparece só às vezes, mesmo em sites que você acessa direto?
- A Cloudflare recalcula o risco a cada requisição, combinando IP, comportamento e pontuação de bot
- O mesmo visitante pode passar direto hoje e cair no desafio amanhã
Dá para testar esse fluxo em ambiente de staging antes de automatizar em produção?
- Sim: use um domínio de teste com a mesma configuração da Cloudflare
- Valide o par proxy + User-Agent em QA antes de levar para produção
Qual é a diferença entre esse desafio e o Turnstile?
O desafio bloqueia o acesso até a verificação terminar; o Turnstile é um widget na página, parecido com o reCAPTCHA, e não exige Cloudflare como proxy reverso.
Quanto tempo leva para resolver automaticamente pela API?
- Faixa típica: 20 a 60 segundos
- Por que é mais lento: a verificação completa do navegador pesa mais que o Turnstile ou o reCAPTCHA
Como confirmo, na resposta da API, que recebi o cookie certo?
Confira o campo request da resposta com status: 1:
- Ele traz a string de solução com o cookie de verificação e o user agent usados
- Grave os dois juntos — separar um do outro invalida o cookie