Tipos de tarefa
Cloudflare Turnstile
Esta página foi traduzida automaticamente da versão em chinês e pode conter erros. Prevalece a versão em chinês.
Uma tarefa do Cloudflare Turnstile retorna um token (token) que você envia ao site de destino para passar na verificação. TurnstileTaskProxyless custa 25 pontos (≈ US$3.75 / 1k) por tarefa e é assíncrona: primeiro createTask, depois getTaskResult a cada 5 segundos. Tarefas com falha ou que expiram têm reembolso de pontos automático.
https://api.yescaptcha.com/createTaskEndpoint globalhttps://cn.yescaptcha.com/createTaskEndpoint ChinaO corpo da requisição é JSON, autenticado com clientKey. Consulte o resultado no mesmo endpoint em que criou a tarefa.
Quando usar
Seção intitulada “Quando usar”Um widget de verificação do Cloudflare (“Confirme que você é humano”) está embutido em um formulário da página, e a página carrega um script de challenges.cloudflare.com/turnstile.
Se a página inteira é bloqueada pelo Cloudflare e exibe “Just a moment…” ou “Verificando seu navegador”, isso é a página de desafio do Cloudflare, não o Turnstile; use página de desafio do Cloudflare. A diferença está em Identificar o tipo de captcha.
Tipos de tarefa e preços
Seção intitulada “Tipos de tarefa e preços”| Tipo de tarefa | Preço | Modo | Observações |
|---|---|---|---|
TurnstileTaskProxyless | US$3.75 / 1k; 25 pontos/tarefa · ¥25 / 1k | Assíncrono | |
TurnstileTaskProxylessM1 | US$4.50 / 1k; 30 pontos/tarefa · ¥30 / 1k | Assíncrono | |
TurnstileTask | US$3.75 / 1k; 25 pontos/tarefa · ¥25 / 1k | Assíncrono | Proxy próprio |
Os preços em dólares americanos são estimativas com base em US$1 ≈ ¥6.67; as tarefas são cobradas em pontos.
TurnstileTaskProxylesseTurnstileTaskProxylessM1têm os mesmos parâmetros e rotas diferentes; um pode servir de reserva para o outro.TurnstileTaskcarrega o captcha pelo seu próprio proxy e exige os campos de proxy.
Parâmetros da requisição
Seção intitulada “Parâmetros da requisição”| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type | string | Sim | Tipo de tarefa; veja "Tipos de tarefa e preços" nesta página |
websiteURL | string | Sim | URL completa da página que exibe o captcha. Use o site em que você vê o captcha, não o domínio do fornecedor do captcha |
websiteKey | string | Sim | A chave do site (sitekey) do Turnstile, normalmente começando com 0x |
pageAction | string | Não | A action que a página passa ao Turnstile (uma opção de turnstile.render, ou data-action no elemento do widget), por exemplo login. Não é necessária na maioria dos casos; adicione somente quando as tarefas continuarem falhando |
data | string | Não | O cData que a página passa ao Turnstile (uma opção de turnstile.render, ou data-cdata no elemento do widget), por exemplo c0bd4b36-7419-4e18-83c6-378699f2a9a2. Não é necessário na maioria dos casos; adicione somente quando as tarefas continuarem falhando |
proxyType | string | Alguns tipos | Protocolo do proxy: http, https, socks4 ou socks5 (Obrigatório para TurnstileTask) |
proxyAddress | string | Alguns tipos | Endereço IP ou nome de host do proxy. Endereços locais ou privados, como 127.0.0.1 ou 192.168.x.x, não funcionam porque nossos servidores não conseguem acessá-los (Obrigatório para TurnstileTask) |
proxyPort | integer | Alguns tipos | Porta do proxy (Obrigatório para TurnstileTask) |
proxyLogin | string | Não | Nome de usuário do proxy, se o proxy exigir autenticação (somente TurnstileTask) |
proxyPassword | string | Não | Senha do proxy, se o proxy exigir autenticação (somente TurnstileTask) |
userAgent | string | Não | User-Agent do navegador. Se o resultado contiver um userAgent, use esse valor ao enviar o token (somente TurnstileTask) |
websiteKey geralmente começa com 0x. Como encontrá-lo: Encontrar os parâmetros do Turnstile.
Se as tarefas continuam falhando: pageAction e data
Seção intitulada “Se as tarefas continuam falhando: pageAction e data”Na maioria dos casos, basta enviar websiteURL e websiteKey; esses dois parâmetros não são necessários. Se você tem certeza de que websiteURL e websiteKey estão corretos e a tarefa ainda falha, verifique se a página passa action e cData ao Turnstile (opções de turnstile.render, ou data-action e data-cdata no elemento do widget). Se passar, envie-os exatamente como estão:
pageAction: oactionda página, por exemplologindata: ocDatada página, por exemploc0bd4b36-7419-4e18-83c6-378699f2a9a2
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY", "pageAction": "login", "data": "c0bd4b36-7419-4e18-83c6-378699f2a9a2" }}Exemplo de requisição
Seção intitulada “Exemplo de requisição”{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" }}curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY" }}'
# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'import osimport time
import requests
API = "https://api.yescaptcha.com"CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable
def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data
def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id)
solution = solve({ "type": "TurnstileTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "0x4AAAAAAA_SITE_KEY",})print(solution["token"])const API = 'https://api.yescaptcha.com';const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable
async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data;}
async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`);}
const solution = await solve({ type: "TurnstileTaskProxyless", websiteURL: "https://example.com/login", websiteKey: "0x4AAAAAAA_SITE_KEY",});console.log(solution.token);Substitua websiteURL e websiteKey pelos valores do site de destino.
Resultado
Seção intitulada “Resultado”{ "errorId": 0, "status": "ready", "solution": { "token": "0.ufq5RgSVZd11DPSX1brdrxnEs28KcVlKj2ORchqxSy2q9yAW6ciq3hriXDF4x...", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36" }}| Campo | Tipo | Descrição |
|---|---|---|
token | string | O token a ser enviado ao site de destino. Uso único; envie-o o quanto antes |
userAgent | string | O User-Agent usado para obter o token. Use este valor ao enviar o token, mesmo que seja diferente do que você enviou |
Preencha o campo cf-turnstile-response da página (ou o campo exigido pela API do site de destino) com o token e envie, usando como User-Agent da requisição o userAgent retornado.
Enquanto a tarefa está em andamento, a resposta é {"errorId": 0, "status": "processing"}; consulte novamente após 5 segundos. Em caso de erro, trate conforme o errorCode; veja Códigos de erro.
Perguntas frequentes
Seção intitulada “Perguntas frequentes”Por quanto tempo um token é válido?
Seção intitulada “Por quanto tempo um token é válido?”É de uso único. Envie-o o quanto antes após recebê-lo (o token do Turnstile geralmente expira em alguns minutos, conforme definido pelo Cloudflare).
O site continua rejeitando o envio
Seção intitulada “O site continua rejeitando o envio”Confirme que websiteURL é a página em que o widget aparece, que websiteKey está correto e que o envio usa o userAgent retornado. Se a página passa action e cData, envie-os como pageAction e data; veja Se as tarefas continuam falhando. Se o site também verifica o IP, use TurnstileTask e faça o envio pelo mesmo proxy.