Solução de Problemas

Token de catraca inválido após solução: diagnóstico e correções

Você enviou um CAPTCHA Turnstile para CaptchaAI, recebeu um token de volta, mas o site de destino o rejeitou. O token está tecnicamente resolvido – o problema é como ou quando você o usa. Este guia cobre todos os motivos pelos quais os tokens da catraca falham após a resolução.


Sintomas

O que você vê Causa provável
Site retorna 403 após enviar token O token expirou antes do envio
O envio do formulário falha silenciosamente Nome de campo incorreto para envio controlado ao endpoint QA
Token aceito, mas ação bloqueada Incompatibilidade de Sitekey – widget errado resolvido
Funciona uma vez e depois falha Token já utilizado (uso único)
Funciona no navegador, falha no script Cookies ou cabeçalhos ausentes

Causa 1: token expirou

Os tokens da catraca expiram rapidamente – normalmente em 300 segundos (5 minutos). Se o seu código demorar muito entre o recebimento do token e o envio, o token estará morto.

Correção: Envie o token imediatamente após recebê-lo.

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit Turnstile task
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAADnPIDROz1234",
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1
}).json()

task_id = submit["request"]
time.sleep(10)

# Poll for result
for _ in range(24):
    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:
        token = result["request"]
        # USE TOKEN IMMEDIATELY — do not delay
        response = requests.post("https://staging.example.com/qa-login", data={
            "username": "user",
            "password": "pass",
            "cf-turnstile-response": token
        })
        break
    time.sleep(5)

Causa 2: chave do site errada

Cada widget Turnstile possui uma chave de site exclusiva. Se a página tiver vários widgets ou você copiou a chave errada, o token será válido, mas rejeitado.

Como encontrar a chave do site correta:

// In browser console on the target page
document.querySelectorAll('[data-sitekey]').forEach(el => {
    console.log('Sitekey:', el.getAttribute('data-sitekey'));
    console.log('Element:', el);
});

Se houver várias chaves de site, use aquela anexada ao formulário que você está enviando.


Causa 3: nome de campo incorreto

Turnstile espera o token em cf-turnstile-response, não em g-recaptcha-response.

# WRONG — this is for reCAPTCHA
data = {"g-recaptcha-response": token}

# CORRECT — this is for Turnstile
data = {"cf-turnstile-response": token}

Alguns sites usam um nome de campo personalizado. Inspecione o formulário para encontrar o campo real:

// Check what field the Turnstile widget populates
document.querySelector('[name*="turnstile"], [name*="cf-"]')

Causa 4: Token já utilizado

Os tokens da catraca são descartáveis. Se o seu código tentar novamente uma solicitação com o mesmo token, a segunda tentativa falhará.

Correção: Resolva um novo CAPTCHA para cada tentativa de envio.


Causa 5: Cookies ou contexto de sessão ausentes

A Cloudflare pode validar o token em relação aos cookies de sessão. Se você resolver o CAPTCHA em uma sessão e enviar em outra, é provável que haja rejeição.

# Use the SAME session for page load and token submission
session = requests.Session()

# Load the page first to establish cookies
session.get("https://staging.example.com/qa-login")

# Then solve and submit using the same session
token = solve_turnstile(sitekey, pageurl)
session.post("https://staging.example.com/qa-login", data={
    "cf-turnstile-response": token
})

Causa 6: Ação ou incompatibilidade de cData

Algumas implementações do Turnstile incluem parâmetros action ou cData vinculados ao token. Se o site espera isso, você deve passá-los ao resolver.

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAADnPIDROz1234",
    "pageurl": "https://staging.example.com/qa-login",
    "action": "login",           # If required by the site
    "data": "custom_cdata_value", # If required by the site
    "json": 1
}).json()

Árvore de decisão

Token solved but rejected
    ↓
Used within 5 minutes? → No → Solve again, submit immediately
    ↓ Yes
Correct sitekey? → No → Find the correct sitekey from the page
    ↓ Yes
Using cf-turnstile-response field? → No → Change field name
    ↓ Yes  
Same session for page load + submit? → No → Use session persistence
    ↓ Yes
Token used only once? → No → Solve a new token per submission
    ↓ Yes
Site requires action/cData? → Check page source, add to API call

Perguntas frequentes

Quanto tempo duram os tokens da Cloudflare Turnstile?

Normalmente 300 segundos (5 minutos). Algumas implementações definem uma expiração mais curta. Envie o token segundos após recebê-lo.

Cloudflare Turnstile é igual a Cloudflare Turnstile em staging?

Não. O Turnstile é um widget incorporado (como o reCAPTCHA). Cloudflare Turnstile em staging é um intersticial de página inteira. Eles usam métodos CaptchaAI diferentes: turnstile vs turnstile_staging.

Por que meu token funciona no Postman, mas não no meu script?

O Postman pode estar enviando cabeçalhos ou cookies diferentes. Combine os cabeçalhos do seu script e o estado da sessão com o que o navegador envia.


Resolva CAPTCHAs de catraca em CaptchaAI

Obtenha uma solução confiável de catraca emcaptchaai.com.


Guias relacionados

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