Quando a Cloudflare sinaliza um visitante como suspeito, ela exibe uma página de desafio intersticial. Uma vez resolvido, o navegador recebe um cookie cookie_qa_validacao que concede acesso à sessão. Este guia explica como funciona o fluxo do desafio e como CaptchaAI lida com ele.
Como funcionam as páginas Cloudflare Turnstile em staging
- O usuário solicita uma página protegida pela Cloudflare
- A Cloudflare avalia sinais de risco (reputação de IP, cabeçalhos, sinal de navegador TLS)
- Se sinalizado, a Cloudflare retornará 403 ou 503 com uma página de desafio JavaScript
- A página de desafio executa verificações do navegador e pode apresentar um widget Cloudflare Turnstile
- Em caso de sucesso, Cloudflare define
cookie_qa_validacaoe redireciona para o URL original - Solicitações subsequentes com o cookie passam sem contestação
O cookie cookie_qa_validacao
| Propriedade | Detalhes |
|---|---|
| Nome | cookie_qa_validacao |
| Domínio | Domínio do site de destino (por exemplo, .example.com) |
| Caminho | / |
| Vitalício | Normalmente de 30 minutos a 24 horas |
| Somente http | Sim |
| Seguro | Sim (somente HTTPS) |
| MesmoSite | Nenhum |
O cookie está vinculado a vários fatores:
- Endereço IP — Usar o cookie de um IP diferente geralmente falha
- User-Agent — Deve corresponder ao UA usado durante a resolução do desafio
- sinal de navegador TLS — Algumas configurações são vinculadas ao TLS ClientHello
Tipos de desafio
Cloudflare atende a diferentes níveis de desafio:
| Desafio | Código de resposta | Interação do usuário | Descrição |
|---|---|---|---|
| Desafio JS | 503 | Nenhum | Somente execução de JavaScript |
| Desafio gerenciado | 403 | Talvez | Cloudflare decide – pode mostrar Turnstile ou passar silenciosamente |
| Desafio interativo | 403 | Sim | Sempre mostra um widget Cloudflare Turnstile |
CaptchaAI resolve todos os três tipos por meio do solucionador Cloudflare Turnstile em staging.
Resolvendo com CaptchaAI
Pitão
import requests
import time
API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"
# Submit Cloudflare Turnstile em staging task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x0000000000000000000000", # may be generic for CF challenge
"pageurl": TARGET_URL,
"json": "1",
}).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
print(f"Task ID: {task_id}")
# Poll for result
for _ in range(30):
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["status"] == 1:
token = result["request"]
print(f"Token received: {token[:50]}...")
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';
const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: API_KEY,
method: 'turnstile',
sitekey: '0x0000000000000000000000',
pageurl: TARGET_URL,
json: 1,
}
});
const taskId = submit.data.request;
// Poll
let token = null;
for (let i = 0; i < 30; i++) {
await new Promise(r => setTimeout(r, 5000));
const poll = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
});
if (poll.data.status === 1) {
token = poll.data.request;
break;
}
}
console.log(`Token: ${token.substring(0, 50)}...`);
Usando o token resolvido
Após resolver, injete o token na página de desafio para obter cookie_qa_validacao:
# With Selenium
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(TARGET_URL) # Load the challenge page
# Inject token into Turnstile response field
driver.execute_script("""
const input = document.querySelector('input[name="cf-turnstile-response"]');
if (input) input.value = arguments[0];
// Trigger form submit or callback
const form = document.querySelector('form');
if (form) form.submit();
""", token)
# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
cookie_qa_validacao = next(
(c for c in cookies if c['name'] == 'cookie_qa_validacao'), None
)
if cookie_qa_validacao:
print(f"cookie_qa_validacao: {cookie_qa_validacao['value'][:30]}...")
Reutilizando o cookie
session = requests.Session()
session.cookies.set("cookie_qa_validacao", cookie_qa_validacao["value"], domain=".example.com")
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code) # 200
Vida útil e atualização do cookie
O cookie cookie_qa_validacao expira. Plano para resolução:
import datetime
def is_cookie_valid(cookie):
if not cookie:
return False
expiry = cookie.get("expiry", 0)
return datetime.datetime.now().timestamp() < expiry - 60 # 60s buffer
def get_or_refresh_clearance(driver, target_url, solve_func):
cookies = driver.get_cookies()
cf = next((c for c in cookies if c["name"] == "cookie_qa_validacao"), None)
if is_cookie_valid(cf):
return cf["value"]
# Re-solve
token = solve_func(target_url)
# ... inject and extract new cookie
Solução de problemas
| Problema | Causa | Correção |
|---|---|---|
| Cookie rejeitado após resolução | Incompatibilidade de IP | Use o mesmo proxy para resolução e solicitações |
| O cookie expira rapidamente | TTL curto definido por site | Resolva antes de expirar; verifique o campo expiry |
| 403 apesar do cookie válido | Incompatibilidade entre usuário e agente | Corresponder UA entre sessões de resolução e solicitação |
| A página do desafio não carrega | JavaScript desativado | Use um navegador completo (Selenium, Puppeteer) |
Perguntas frequentes
Posso compartilhar cookie_qa_validacao entre máquinas diferentes?
Somente se eles compartilharem o mesmo IP e você corresponder à string User-Agent. A Cloudflare geralmente vincula o cookie ao IP de origem.
Quanto tempo dura cookie_qa_validacao?
Normalmente de 30 minutos a 24 horas, dependendo da configuração do Cloudflare do proprietário do site.
Resolva páginas Cloudflare Turnstile em staging com CaptchaAI
Obtenha sua chave API emcaptchaai.com.
Guias relacionados
- Extração de chave de site Cloudflare Turnstile
- Cloudflare Turnstile vs hCaptcha vs reCAPTCHA
- Cookies para mais adequado taxas de resolução