Looking for international version of our service? Go to 2captcha.com

Логотип «GitHub»

Cloudflare Turnstile

Turnstile widget

Основанный на токенах метод обхода капчи Cloudflare Turnstile. Поддерживаются два вида капчи Cloudflare Turnstile, как Standalone Captcha, так и Cloudflare Challenge page.

Есть два разных случая, которые требуют разного подхода:

  • Standalone Captcha - виджет капчи размещен на странице веб-сайта, смотрите нашу демо страницу Turnstile
  • Cloudflare Challenge page - капча отображается на странице проверки Cloudflare

Standalone Captcha

Чтобы обойти Standalone Captcha, вам просто нужно найти sitekey, получить токен из нашего API, а затем передать его вашей целевой странице в качестве значения элемента ввода с именем cf-turnstile-response или g-recaptcha-response для режима совместимости с reCAPTCHA. Также токен может быть обработан с помощью функции обратного вызова, переданной в вызов turnstile.render.

Cloudflare Challenge page

Это гораздо более сложный случай. Вам следует перехватить вызов turnstile.render и получить следующие значения:

  • cData
  • chlPageData
  • action

Также вам нужно будет перехватить определение функции обратного вызова и передать в запросе userAgent вашего браузера.

Чтобы перехватить необходимые параметры, вы можете встроить следующий JavaScript на страницу, перед загрузкой виджета Cloudflare Turnstile капчи.

const i = setInterval(()=>{
if (window.turnstile) {
    clearInterval(i)
    window.turnstile.render = (a,b) => {
    let p = {
        type: "TurnstileTaskProxyless",
        websiteKey: b.sitekey,
        websiteURL: window.location.href,
        data: b.cData,
        pagedata: b.chlPageData,
        action: b.action,
        userAgent: navigator.userAgent
    }
    console.log(JSON.stringify(p))
    window.tsCallback = b.callback
    return 'foo'
    }
}
},10)  

Другой подход заключается в перехвате запроса к api.js скрипту и замене его вашим собственным скриптом, который возвращает параметры и делает обратный вызов доступным глобально.

Наконец, когда вы получили решение:

  • выполните функцию обратного вызова, передавая полученный токен в качестве аргумента

Типы задач

  • TurnstileTaskProxyless - мы используем собственный пул прокси-серверов для решения капч
  • TurnstileTask - мы используем переданный вами прокси

Спецификация для типа задачи TurnstileTaskProxyless

Свойство Тип Обязателен Описание
type Строка Да Тип задачи:
TurnstileTaskProxyless
TurnstileTask
websiteURL Строка Да Полный URL-адрес целевой веб-страницы, на которую загружается капча. Мы не открываем страницу, это не проблема, если страница доступна только для авторизованных пользователей
websiteKey Строка Да Turnstile sitekey. Значение sitekey можно найти внутри свойства data-sitekey элемента div Turnstile капчи
userAgent Строка Да User-Agent вашего браузера. Должен совпадать с User-Agent который вы используете для доступа к сайту. Используйте только современные браузеры, выпущенные в последние 6 месяцев
action Строка Нет* Требуется для Cloudflare Challenge page. Значение параметра action вызова turnstile.render
data Строка Нет* Требуется для Cloudflare Challenge page. Значение параметра cData вызова turnstile.render
pagedata Строка Нет* Требуется для Cloudflare Challenge page. Значение параметра chlPageData вызова turnstile.render

Спецификация для типа задачи TurnstileTask

Задача TurnstileTask расширяет TurnstileTaskProxyless, добавляя набор параметров, связанных с прокси, перечисленных ниже.

Свойство Тип Обязателен Описание
proxyType Строка Да Тип прокси:
http
socks4
socks5
proxyAddress Строка Да IP-адрес прокси-сервера или имя хоста
proxyPort Число Да Порт прокси-сервера
proxyLogin Строка Нет Логин используемый для аунтефикации на прокси-сервере
proxyPassword Строка Нет Пароль используемый для аунтефикации на прокси-сервере

Примеры запросов

Метод: createTask
Эндпоинт API: https://api.rucaptcha.com/createTask

Standalone Captcha

TurnstileTaskProxyless пример запроса

{
    "clientKey":"YOUR_API_KEY",
    "task": {
        "type":"TurnstileTaskProxyless",
        "websiteURL":"https://rucaptcha.com/demo/cloudflare-turnstile",
        "websiteKey":"0x4AAAAAAAVrOwQWPlm3Bnr5"
    }
}

TurnstileTask пример запроса

{
    "clientKey":"YOUR_API_KEY",
    "task": {
        "type":"TurnstileTask",
        "websiteURL":"https://rucaptcha.com/demo/cloudflare-turnstile",
        "websiteKey":"0x4AAAAAAAVrOwQWPlm3Bnr5",
        "proxyType":"http",
        "proxyAddress":"1.2.3.4",
        "proxyPort":"8080",
        "proxyLogin":"user23",
        "proxyPassword":"p4$w0rd"
    }
}

Cloudflare Challenge Pages

TurnstileTaskProxyless пример запроса

{
    "clientKey":"YOUR_API_KEY",
    "task": {
        "type":"TurnstileTaskProxyless",
        "websiteURL":"https://rucaptcha.com/demo/cloudflare-turnstile",
        "websiteKey":"0x4AAAAAAAVrOwQWPlm3Bnr5",
        "action": "managed",
        "data": "80001aa1affffc21",
        "pagedata": "3gAFo2l...55NDFPRFE9",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    }
}

TurnstileTask пример запроса

{
    "clientKey":"YOUR_API_KEY",
    "task": {
        "type":"TurnstileTask",
        "websiteURL":"https://rucaptcha.com/demo/cloudflare-turnstile",
        "websiteKey":"0x4AAAAAAAVrOwQWPlm3Bnr5",
        "action": "managed",
        "data": "80001aa1affffc21",
        "pagedata": "3gAFo2l...55NDFPRFE9",      
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
        "proxyType":"http",
        "proxyAddress":"1.2.3.4",
        "proxyPort":"8080",
        "proxyLogin":"user23",
        "proxyPassword":"p4$w0rd"
    }
}

Пример ответа

Метод: getTaskResult
Эндпоинт API: https://api.rucaptcha.com/getTaskResult

{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "token": "0.zrSnRHO7h0HwSjSCU8oyzbjEtD8p.d62306d4ee00c77dda697f959ebbd7bd97",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    },
    "cost": "0.00145",
    "ip": "1.2.3.4",
    "createTime": 1692863536,
    "endTime": 1692863556,
    "solveCount": 1
}

Примеры кода

// https://github.com/2captcha/2captcha-php

require(__DIR__ . '/../src/autoloader.php');

$solver = new \TwoCaptcha\TwoCaptcha('YOUR_API_KEY');

try {
    $result = $solver->turnstile([
        'sitekey' => '0x4AAAAAAAVrOwQWPlm3Bnr5',
        'url'     => 'https://rucaptcha.com/demo/cloudflare-turnstile',
    ]);
} catch (\Exception $e) {
    die($e->getMessage());
}
# https://github.com/2captcha/2captcha-python

import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

from twocaptcha import TwoCaptcha

api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

solver = TwoCaptcha(api_key)

try:
    result = solver.turnstile(
        sitekey='0x4AAAAAAAVrOwQWPlm3Bnr5',
        url='https://rucaptcha.com/demo/cloudflare-turnstile',
    )

except Exception as e:
    sys.exit(e)

else:
    sys.exit('solved: ' + str(result))
require 'api_2captcha'

client =  Api2Captcha.new("YOUR_API_KEY")

result = client.turnstile({
sitekey: '0x4AAAAAAAVrOwQWPlm3Bnr5',
pageurl: 'https://rucaptcha.com/demo/cloudflare-turnstile'
})

Полезные ссылки