Типы задач
Cloudflare Turnstile
Эта страница переведена с китайской версии машинным переводом и может содержать ошибки. Приоритет имеет китайская версия.
Задача Cloudflare Turnstile возвращает токен (token), который нужно отправить на целевой сайт для прохождения проверки. TurnstileTaskProxyless стоит 25 pts (≈ $3.75 / 1k) за задачу и работает асинхронно: сначала createTask, затем getTaskResult каждые 5 секунд. При неудачном распознавании и по тайм-ауту баллы возвращаются автоматически.
https://api.yescaptcha.com/createTaskГлобальный endpointhttps://cn.yescaptcha.com/createTaskEndpoint для КитаяТело запроса — JSON, авторизация по clientKey. Результат нужно запрашивать на том же endpoint, где создана задача.
Когда использовать
Заголовок раздела «Когда использовать»В форме на странице встроено окно проверки Cloudflare («Подтвердите, что вы человек»), а страница загружает скрипт challenges.cloudflare.com/turnstile.
Если Cloudflare закрывает всю страницу и показывает «Подождите…» или «Проверяем ваш браузер», это страница проверки Cloudflare, а не Turnstile. Используйте Страница проверки Cloudflare. Различия описаны в разделе Как определить тип капчи.
Типы задач и цены
Заголовок раздела «Типы задач и цены»| Тип задачи | Цена | Режим | Примечания |
|---|---|---|---|
TurnstileTaskProxyless | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | |
TurnstileTaskProxylessM1 | $4.50 / 1k; 30 pts/задача · ¥30 / 1k | Асинхронный | |
TurnstileTask | $3.75 / 1k; 25 pts/задача · ¥25 / 1k | Асинхронный | Свой прокси |
Цены в долларах США являются оценочными и рассчитаны по курсу 1 USD ≈ ¥6.67; списание за задачи производится в баллах.
TurnstileTaskProxylessиTurnstileTaskProxylessM1имеют одинаковые параметры, но разные маршруты; их можно использовать как резервные друг для друга.TurnstileTaskзагружает капчу через ваш собственный прокси, поэтому нужно передать поля прокси.
Параметры запроса
Заголовок раздела «Параметры запроса»| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
type | string | Да | Тип задачи; см. «Типы задач и цены» на этой странице |
websiteURL | string | Да | Полный URL страницы, на которой показывается капча. Укажите сайт, на котором вы видите капчу, а не домен поставщика капчи |
websiteKey | string | Да | Ключ сайта Turnstile (sitekey), обычно начинается с 0x |
pageAction | string | Нет | Значение action, которое страница передаёт в Turnstile (параметр turnstile.render или data-action на элементе виджета), например login. В большинстве случаев не требуется; добавляйте его, только если задачи продолжают завершаться неудачей |
data | string | Нет | Значение cData, которое страница передаёт в Turnstile (параметр turnstile.render или data-cdata на элементе виджета), например c0bd4b36-7419-4e18-83c6-378699f2a9a2. В большинстве случаев не требуется; добавляйте его, только если задачи продолжают завершаться неудачей |
proxyType | string | Некоторые типы | Протокол прокси: http, https, socks4 или socks5 (Обязательно для TurnstileTask) |
proxyAddress | string | Некоторые типы | IP-адрес или имя хоста прокси. Локальные или частные адреса, например 127.0.0.1 или 192.168.x.x, не подойдут, так как наши серверы не могут до них достучаться (Обязательно для TurnstileTask) |
proxyPort | integer | Некоторые типы | Порт прокси (Обязательно для TurnstileTask) |
proxyLogin | string | Нет | Имя пользователя прокси, если прокси требует аутентификации (только TurnstileTask) |
proxyPassword | string | Нет | Пароль прокси, если прокси требует аутентификации (только TurnstileTask) |
userAgent | string | Нет | User-Agent браузера. Если в результате есть userAgent, используйте это значение при отправке токена (только TurnstileTask) |
websiteKey обычно начинается с 0x. Как его найти, см. Поиск параметров Turnstile.
Если задача не проходит: pageAction и data
Заголовок раздела «Если задача не проходит: pageAction и data»В большинстве случаев достаточно websiteURL и websiteKey, эти два параметра не нужны. Если вы уверены, что websiteURL и websiteKey верны, а задача всё равно не проходит, проверьте, передаёт ли страница в Turnstile action и cData (параметры turnstile.render или атрибуты data-action и data-cdata на элементе окна проверки). Если передаёт, укажите их без изменений:
pageAction:actionсо страницы, напримерlogindata:cDataсо страницы, напримерc0bd4b36-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" }}Пример запроса
Заголовок раздела «Пример запроса»{ "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);Замените websiteURL и websiteKey значениями целевого сайта.
Результат
Заголовок раздела «Результат»{ "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" }}| Поле | Тип | Описание |
|---|---|---|
token | string | Токен, который нужно отправить на целевой сайт. Одноразовый; отправьте его как можно скорее |
userAgent | string | User-Agent, использованный при получении токена. Используйте это значение при отправке токена, даже если оно отличается от переданного вами |
Подставьте token в поле cf-turnstile-response на странице (или в поле, которое требует API сайта) и отправьте запрос, используя возвращённый userAgent в качестве User-Agent.
Пока задача выполняется, возвращается {"errorId": 0, "status": "processing"}; повторите запрос через 5 секунд. Ошибки обрабатывайте по errorCode, см. Коды ошибок.
Частые вопросы
Заголовок раздела «Частые вопросы»Как долго действует токен?
Заголовок раздела «Как долго действует токен?»Токен одноразовый, отправляйте его как можно скорее после получения (токены Turnstile обычно истекают через несколько минут, это определяет Cloudflare).
После отправки сайт всё равно не принимает токен
Заголовок раздела «После отправки сайт всё равно не принимает токен»Убедитесь, что websiteURL — это страница с окном проверки, websiteKey указан верно, а при отправке используется возвращённый userAgent. Если страница передаёт action и cData, добавьте их как pageAction и data, см. выше раздел «Если задача не проходит: pageAction и data». Если сайт дополнительно проверяет IP, используйте TurnstileTask и отправляйте токен через тот же прокси.