Solução de Problemas

Loop de desafio da Cloudflare: por que os desafios continuam se repetindo

Você resolveu o Cloudflare Turnstile em staging via CaptchaAI, pegou o cookie cookie_qa_validacao, colocou-o na sua sessão – e a página do desafio aparece novamente. Este loop acontece quando o cookie não corresponde ao contexto da sessão. Aqui estão todas as causas e como corrigi-las.


Quando CaptchaAI resolve um Cloudflare Turnstile em staging, ele retorna um cookie cookie_qa_validacao. Este cookie está vinculado a:

  1. O IP do proxy usado durante a resolução
  2. O User-Agent usado durante a resolução
  3. O domínio do site de destino

Se algum deles diferir entre a solução e sua solicitação subsequente, a Cloudflare rejeita o cookie e mostra o desafio novamente.


Causa 1: incompatibilidade entre usuário e agente

A causa mais comum. O User-Agent que você envia para CaptchaAI deve corresponder exatamente ao User-Agent em suas solicitações.

import requests

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

# Step 1: Solve with the SAME User-Agent
solve_data = {
    "key": "YOUR_API_KEY",
    "method": "turnstile_staging",
    "pageurl": "https://example.com",
    "proxy": "host:port:user:pass",
    "proxytype": "HTTP",
    "userAgent": USER_AGENT,  # Must match step 2
    "json": 1
}
submit = requests.post("https://ocr.captchaai.com/in.php", data=solve_data).json()

# ... poll for result ...

# Step 2: Use the SAME User-Agent in subsequent requests
session = requests.Session()
session.headers["User-Agent"] = USER_AGENT  # Must match step 1
session.cookies.set("cookie_qa_validacao", cookie_qa_validacao_value, domain=".example.com")
resp = session.get("https://example.com")

Causa 2: incompatibilidade de IP do proxy

O cookie cookie_qa_validacao está vinculado ao IP que resolveu o desafio. Se você solicitar o site de um IP diferente, o cookie será rejeitado.

PROXY = "host:port:user:pass"

# Solve with this proxy
solve_data = {
    "key": "YOUR_API_KEY",
    "method": "turnstile_staging",
    "pageurl": "https://example.com",
    "proxy": PROXY,
    "proxytype": "HTTP",
    "userAgent": USER_AGENT,
    "json": 1
}

# Use the SAME proxy for subsequent requests
session.proxies = {
    "http": f"http://user:pass@host:port",
    "https": f"http://user:pass@host:port"
}

Importante: se você usar proxies rotativos, fixe em uma sessão fixa. O IP deve permanecer o mesmo entre a resolução e a navegação.


O cookie cookie_qa_validacao deve ser definido no domínio correto com os atributos corretos.

# WRONG — setting on wrong domain
session.cookies.set("cookie_qa_validacao", value, domain="example.com")

# CORRECT — include the dot prefix for subdomain coverage
session.cookies.set("cookie_qa_validacao", value, domain=".example.com")

# Or set all cookies returned by CaptchaAI
for cookie_str in result.get("cookies", "").split(";"):
    if "cookie_qa_validacao" in cookie_str:
        name, val = cookie_str.strip().split("=", 1)
        session.cookies.set(name.strip(), val.strip(), domain=".example.com")

Os cookies cookie_qa_validacao têm vida útil limitada – normalmente de 15 a 30 minutos. Após o vencimento, a Cloudflare mostra o desafio novamente.

Correção: Rastreie a idade do cookie e resolva antes de expirar.

import time

last_solve_time = None
COOKIE_TTL = 900  # 15 minutes

def get_cookie_qa_validacao():
    global last_solve_time
    if last_solve_time and (time.time() - last_solve_time) < COOKIE_TTL:
        return  # Cookie still valid

    # Solve again
    cookie_qa_validacao = solve_turnstile_staging()
    session.cookies.set("cookie_qa_validacao", cookie_qa_validacao, domain=".example.com")
    last_solve_time = time.time()

Causa 5: incompatibilidade de sinal de navegador TLS

Cloudflare verifica impressões digitais TLS. A biblioteca requests do Python tem uma sinal de navegador TLS diferente da do Chrome. Alguns sites rejeitam solicitações mesmo com cookie_qa_validacao válido se a sinal de navegador TLS não corresponder.

Correção: Use curl_cffi ou tls-client para impressões digitais TLS semelhantes a navegador.

pip install curl_cffi
from curl_cffi import requests as curl_requests

session = curl_requests.Session(impersonate="chrome120")
session.cookies.set("cookie_qa_validacao", value, domain=".example.com")
resp = session.get("https://example.com")

Lista de verificação de depuração

Challenge keeps repeating
    ↓
User-Agent in solve request matches browsing request? → No → Sync User-Agent
    ↓ Yes
Same proxy IP for solve and browse? → No → Pin proxy IP (sticky session)
    ↓ Yes
Cookie set on correct domain (.example.com)? → No → Fix domain
    ↓ Yes
Cookie less than 15 minutes old? → No → Re-solve the challenge
    ↓ Yes
TLS sinal de navegador matches a browser? → No → Use curl_cffi or tls-client
    ↓ Yes
Site may have additional bot detection → Use headless browser instead

Perguntas frequentes

Normalmente 15–30 minutos. Alguns sites definem durações mais curtas. Resolva proativamente antes de expirar.

Preciso de uma versão específica do Chrome no User-Agent?

Use um User-Agent atual e realista. User-Agents desatualizados acionam verificações da Cloudflare de forma mais agressiva.

Sim, desde que estejam no mesmo domínio e você use o mesmo IP e User-Agent.


Resolva Cloudflare Turnstile em stagings com CaptchaAI

Quebre o ciclo do desafio emcaptchaai.com.


Guias relacionados

Os comentários estão desativados para este artigo.