Tipos de tarea
Cloudflare Turnstile
Esta página se tradujo automáticamente de la versión en chino y puede contener errores. Prevalece la versión en chino.
Una tarea de Cloudflare Turnstile devuelve un token (token) que envías al sitio de destino para superar la verificación. TurnstileTaskProxyless cuesta 25 puntos (≈ $3.75 / 1k) por tarea y es asíncrona: primero createTask y después getTaskResult cada 5 segundos. Si la tarea falla o expira, se hace un reembolso de puntos automático.
https://api.yescaptcha.com/createTaskEndpoint globalhttps://cn.yescaptcha.com/createTaskEndpoint ChinaEl cuerpo de la solicitud es JSON y se autentica con clientKey. Consulta el resultado en el mismo endpoint en el que creaste la tarea.
Cuándo usarlo
Sección titulada «Cuándo usarlo»Un formulario de la página incluye el cuadro de verificación de Cloudflare (“Confirma que eres humano”) y la página carga el script de challenges.cloudflare.com/turnstile.
Si Cloudflare bloquea toda la página y muestra “Un momento…” o “Verificando su navegador”, se trata de la página de verificación de Cloudflare, no de Turnstile; usa página de verificación de Cloudflare. Consulta las diferencias en Identificar el tipo de captcha.
Tipos de tarea y precios
Sección titulada «Tipos de tarea y precios»| Tipo de tarea | Precio | Modo | Notas |
|---|---|---|---|
TurnstileTaskProxyless | $3.75 / 1k; 25 puntos/tarea · ¥25 / 1k | Asíncrono | |
TurnstileTaskProxylessM1 | $4.50 / 1k; 30 puntos/tarea · ¥30 / 1k | Asíncrono | |
TurnstileTask | $3.75 / 1k; 25 puntos/tarea · ¥25 / 1k | Asíncrono | Proxy propio |
Los precios en dólares son estimaciones con US$1 ≈ ¥6.67; las tareas se cobran en puntos.
TurnstileTaskProxylessyTurnstileTaskProxylessM1tienen los mismos parámetros y distinta ruta; puedes usar uno como respaldo del otro.TurnstileTaskcarga el captcha con tu propio proxy y requiere los campos de proxy.
Parámetros de la solicitud
Sección titulada «Parámetros de la solicitud»| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
type | string | Sí | Tipo de tarea; consulta "Tipos de tarea y precios" en esta página |
websiteURL | string | Sí | URL completa de la página que muestra el captcha. Usa el sitio donde ves el captcha, no el dominio del proveedor del captcha |
websiteKey | string | Sí | La clave del sitio (sitekey) de Turnstile, normalmente empieza por 0x |
pageAction | string | No | La action que la página pasa a Turnstile (una opción de turnstile.render, o data-action en el elemento del widget), p. ej. login. No es necesaria en la mayoría de los casos; agrégala solo cuando las tareas sigan fallando |
data | string | No | El cData que la página pasa a Turnstile (una opción de turnstile.render, o data-cdata en el elemento del widget), p. ej. c0bd4b36-7419-4e18-83c6-378699f2a9a2. No es necesario en la mayoría de los casos; agrégalo solo cuando las tareas sigan fallando |
proxyType | string | Algunos tipos | Protocolo del proxy: http, https, socks4 o socks5 (Obligatorio para TurnstileTask) |
proxyAddress | string | Algunos tipos | Dirección IP o nombre de host del proxy. Las direcciones locales o privadas como 127.0.0.1 o 192.168.x.x no funcionan porque nuestros servidores no pueden acceder a ellas (Obligatorio para TurnstileTask) |
proxyPort | integer | Algunos tipos | Puerto del proxy (Obligatorio para TurnstileTask) |
proxyLogin | string | No | Usuario del proxy, si el proxy requiere autenticación (solo TurnstileTask) |
proxyPassword | string | No | Contraseña del proxy, si el proxy requiere autenticación (solo TurnstileTask) |
userAgent | string | No | User-Agent del navegador. Si el resultado contiene un userAgent, usa ese valor al enviar el token (solo TurnstileTask) |
websiteKey suele empezar por 0x. Para saber cómo encontrarlo, consulta Encontrar los parámetros de Turnstile.
Si la tarea no pasa: pageAction y data
Sección titulada «Si la tarea no pasa: pageAction y data»En la gran mayoría de los casos basta con websiteURL y websiteKey, y no necesitas estos dos parámetros. Si estás seguro de que websiteURL y websiteKey son correctos y la tarea sigue sin pasar, revisa si la página pasa action y cData a Turnstile (opciones de turnstile.render, o data-action y data-cdata en el elemento del cuadro de verificación). Si los pasa, envíalos tal cual:
pageAction: elactionde la página, por ejemplologindata: elcDatade la página, por ejemploc0bd4b36-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" }}Ejemplo de solicitud
Sección titulada «Ejemplo de solicitud»{ "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);Sustituye websiteURL y websiteKey por los valores del sitio de destino.
Resultado
Sección titulada «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 | Descripción |
|---|---|---|
token | string | El token que debes enviar al sitio de destino. De un solo uso; envíalo lo antes posible |
userAgent | string | El User-Agent usado para obtener el token. Usa este valor al enviar el token, aunque sea distinto del que enviaste |
Coloca el token en el campo cf-turnstile-response de la página (o en el campo que exija la API del sitio de destino) y envíalo, usando como User-Agent el userAgent devuelto.
Mientras se procesa, la respuesta es {"errorId": 0, "status": "processing"}; vuelve a consultar 5 segundos después. Si hay un error, gestiónalo según errorCode; consulta Códigos de error.
Preguntas frecuentes
Sección titulada «Preguntas frecuentes»¿Cuánto tiempo es válido el token?
Sección titulada «¿Cuánto tiempo es válido el token?»Es de un solo uso. Te recomendamos enviarlo lo antes posible tras obtenerlo (los tokens de Turnstile suelen caducar en pocos minutos, según lo decide Cloudflare).
Tras el envío, el sitio sigue sin aceptarlo
Sección titulada «Tras el envío, el sitio sigue sin aceptarlo»Comprueba que websiteURL sea la página donde aparece el cuadro de verificación, que websiteKey sea correcto y que en el envío uses el userAgent devuelto. Si la página pasa action y cData, envíalos como pageAction y data; consulta Si la tarea no pasa más arriba. Si el sitio también comprueba la IP, usa TurnstileTask y haz el envío a través del mismo proxy.