TurnstileTask | Cloudflare Challenge
Автоматически поддерживаются все подтипы Turnstile: manual, non-interactive и invisible. Поэтому нет необходимости указывать подтип для обычной капчи.
Внимание!
Если вы решаете Turnstile на страницах cloudflare 5s challenge, то не забывайте указывать cloudflareTaskType
и связанные с ним поля. userAgent указывать обязательно.
Структура объекта
Параметр | Тип | Обязательный | Значение |
type | String | да | TurnstileTask |
websiteURL | String | да | Адрес страницы, на которой решается капча |
websiteKey | String | да | Ключ Turnstile |
proxyType | String | да | http - обычный http/https прокси |
proxyAddress | String | да | IP адрес прокси IPv4/IPv6. Не допускается:
|
proxyPort | Integer | да | Порт прокси |
proxyLogin | String | нет | Логин прокси-сервера |
proxyPassword | String | нет | Пароль прокси-сервера |
cloudflareTaskType | String | нет | cf_clearance - если требуются куки; |
htmlPageBase64 | String | да, если cloudflareTaskType равен cf_clearance | Закодированная в base64 html страница с капчей. |
userAgent | String | да, если указан cloudflareTaskType | Поддерживаются только последние UA от Chrome. |
pageAction | String | да, если cloudflareTaskType равен token | Поле |
data | String | да, если cloudflareTaskType равен token | Значение поля data можно взять из параметра |
pageData | String | да, если cloudflareTaskType равен token | Значение поля pageData можно взять из параметра |
Прокси для получения токена передавать не обязательно.
Эти параметры находятся в объекте, который передаётся во время создания капчи в функцию window.turnstile.render(el, paramsObj)
. Получить их можно, например, с помощью выполнения JavaScript перед загрузкой остальных скриптов:
(function () {
const obj = {
render: function () {
const { action, cData, chlPageData } = arguments[1];
const params = [
["action", action],
["data", cData],
["pageData", chlPageData],
];
console.table(params)
}
};
Object.defineProperty(window, "turnstile", {
get: () => {
return obj;
},
});
})();
Примеры запросов
Обычный Turnstile:
Адрес https://api.capmonster.cloud/createTask
{
"clientKey":"dce6bcbb1a728ea8d871de6d169a2057",
"task":
{
"type":"TurnstileTask",
"websiteURL":"http://tsmanaged.zlsupport.com",
"websiteKey":"0x4AAAAAAABUYP0XeMJF0xoy"
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere"
}
}
Пример ответа
{
"errorId":0,
"taskId":407533072
}
Cloudflare challenge
Адрес https://api.capmonster.cloud/createTask
{
"clientKey":"dce6bcbb1a728ea8d871de6d169a2057",
"task":
{
"type":"TurnstileTask",
"websiteURL":"https://nowsecure.nl",
"websiteKey":"0x4AAAAAAADnPIDROrmt1Wwj"
"proxyType":"http",
"proxyAddress":"8.8.8.8",
"proxyPort":8080,
"proxyLogin":"proxyLoginHere",
"proxyPassword":"proxyPasswordHere",
"cloudflareTaskType": "cf_clearance",
"htmlPageBase64": "PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
}
Получение результата
Используйте метод getTaskResult, чтобы получить решение Turnstile. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 5 до 20 с.
Свойство | Тип | Описание |
cf_clearance | String | Специальные куки cloudflare, которые вы можете подставить в свой браузер |
token | String | Используйте токен при вызове callback функции |
Когда нужно указывать cloudflareTaskType
, а когда нет? Или как отличить обычный Turnstile от Cloudflare Challenge.
Cloudflare challenge может выглядеть по-разному.
Обычный вариант:
Стилизованные варианты:
Чтобы окончательно убедиться в наличии Cloudflare, можно открыть инструменты разработчика, посмотреть трафик, изучить код страницы и увидеть характерные признаки:
Первый запрос к сайту возвращает код 403:
Форма с id challenge-form имеет атрибут action(не путать с action из параметров для капчи turnstile), содержащий параметр
__cf_chl_f_tk=
:На странице находится два похожих тега
<script>
, которые создают новое значение в объектеwindow
: