Перейти к основному содержимому
Возникают проблемы с получением токена?
Свяжитесь с поддержкой

Cloudflare Turnstile

После решения капчи вы получаете токен, который необходимо вставить в специальное поле на странице. Автоматически поддерживаются все подтипы Turnstile: manual, non-interactive и invisible. Поэтому нет необходимости указывать подтип для обычной капчи.

Ещё больше по теме в нашем блоге
Ещё больше по теме в нашем блоге

Параметры запроса

Вам требуется решить обычную Turstile капчу, как здесь. Обратите внимание, что капча на страницах Challenge может выглядеть идентично. Посмотрите, как отличить обычный Turnstile от Challenge.

Внимание!
  • CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.

  • Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.

  • После решения вы получите токен для подтверждения прохождения проверки.

type<string>required

TurnstileTask


websiteURL<string>required

Адрес страницы, на которой решается капча


websiteKey<string>required

Ключ Turnstile


pageAction<string>optional

Поле action, которое можно найти в callback функции для загрузки капчи


data<string>optional

Значение поля data можно взять из параметра cData.


proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (там где можно видеть IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.


Метод создания задачи

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "http://tsmanaged.zlsupport.com",
"websiteKey": "0x4AAAAAAABUYP0XeMJF0xoy"
}
}

Ответ

{
"errorId": 0,
"taskId": 407533072
}

Метод получения результата задачи

Используйте метод getTaskResult, чтобы получить решение Turnstile. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 5 до 20 с.

POST
https://api.capmonster.cloud/getTaskResult

Запрос

{
"clientKey": "API_KEY",
"taskId": 407533072
}

Ответ

{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "userAgentPlaceholder",
"token": "0.iGX3xsyFCkbGePM3jP4P4khLo6TrLukt8ZzBvwuQOvbC...f61f3082"
}
}
СвойствоТипОписание
tokenStringИспользуйте токен в input поле или при вызове callback функции

Как отличить Cloudflare Turnstile от Cloudflare Challenge

Отличия между Turnstile и Challenge

Типы проверок от Cloudflare могут выглядеть по-разному.

Обычный вариант:

Стилизованные варианты:

Challenge органично встроен в сам сайт

Выглядит как обычная капча Turnstile, но на самом деле это Challenge

Чтобы окончательно убедиться в наличии Challenge, можно открыть инструменты разработчика, посмотреть трафик, изучить код страницы и увидеть характерные признаки:

  • Первый запрос к сайту возвращает код 403:

  • Форма с id challenge-form имеет атрибут action (не путать с action из параметров для капчи turnstile), содержащий параметр __cf_chl_f_tk=:

  • На странице находится два похожих тега <script>, которые создают новое значение в объекте window:


Как найти все нужные параметры для создания задачи на решение

Вручную

  1. Откройте ваш сайт, где отображается капча, в браузере.
  2. Правой кнопкой кликните по элементу капчи и выберите Inspect.

websiteKey

Можно найти в Элементах:

sitekeyTurnstile

sitekeyTurnstile1

pageAction

Action и также sitekey можно найти в callback-функции:

callbackTurnstile

Автоматически

Для автоматизации поиска параметров их можно извлекать через браузер (обычный или headless, например, с Playwright) или напрямую из HTTP-запросов. Поскольку значения динамических параметров действуют недолго, их рекомендуется использовать сразу после получения.

Важно!

Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.

Показать код (для браузера)
// Функция для проверки наличия window.onloadTurnstileCallback
const checkTurnstileCallback = () => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject('Таймаут ожидания callback'), 30000);

const interval = setInterval(() => {
if (window.onloadTurnstileCallback !== undefined) {
clearInterval(interval);
clearTimeout(timeout);

const callbackDetails = window.onloadTurnstileCallback.toString();
const sitekeyMatch = callbackDetails.match(/sitekey: ['"]([^'"]+)['"]/);
const actionMatch = callbackDetails.match(/action: ['"]([^'"]+)['"]/);

resolve({
sitekey: sitekeyMatch ? sitekeyMatch[1] : null,
action: actionMatch ? actionMatch[1] : null,
});
}
}, 500);
});
};

// Попытка найти любой элемент с data-sitekey
const turnstileElement = document.querySelector('[data-sitekey]');

if (turnstileElement) {
const sitekey = turnstileElement.getAttribute("data-sitekey");
console.log("Turnstile Sitekey (из элемента):", sitekey);
} else {
console.log("Turnstile элемент не найден. Проверяем через callback...");

checkTurnstileCallback()
.then((data) => {
console.log("Turnstile Params (из callback):", data);
})
.catch((error) => {
console.error(error);
});
}

Используйте библиотеку SDK

Показать код (для браузера)
// https://github.com/ZennoLab/capmonstercloud-client-js

import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

document.addEventListener("DOMContentLoaded", async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Замените на корректное значение
});

// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
});
Показать код (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

async function solveTurnstile() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com", // URL страницы с капчей
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy" // Замените на корректное значение
});

// Пример использования вашего собственного прокси
// Раскомментируйте данный блок, если вы хотите использовать собственный прокси

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

turnstileRequest = new TurnstileRequest({
websiteURL: "http://tsmanaged.zlsupport.com",
websiteKey: "0x4AAAAAAABUYP0XeMJF0xoy",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

const result = await client.Solve(turnstileRequest);
console.log("Solution:", result);
}

solveTurnstile().catch(err => console.error("Ошибка:", err));