Туториалы по API

Как решить проблему Cloudflare с помощью API

страница Cloudflare-защиты в staging — это полностраничное межстраничное объявление с надписью «Проверка браузера…», прежде чем предоставить вам доступ к защищенному сайту. В отличие от Cloudflare Turnstile (встраиваемого виджета), страница Challenge блокирует весь запрос, пока вы его не передадите. CaptchaAI решает эту проблему и возвращает файл cookie qa_validation_cookie, который предоставляет доступ к защищенному ресурсу.

Существует три важных требования, которые отличают страница Cloudflare-защиты в staging от любого другого типа CAPTCHA, поддерживаемого CaptchaAI:

  1. Прокси-сервер обязателен — решатель должен использовать ваш прокси-сервер, чтобы файл cookie qa_validation_cookie был привязан к IP-адресу, который вы контролируете.
  2. Возвращается User-Agent — файл cookie привязан к определенной строке User-Agent. Вы должны использовать именно тот User-Agent из ответа.
  3. IP + User-Agent должны совпадать — все последующие запросы к защищенному сайту должны использовать один и тот же прокси и один и тот же User-Agent.

В этом руководстве описывается весь процесс работы с кодом Python, Node.js и PHP.

Ищете Cloudflare Turnstile? Это другой тип CAPTCHA с другим методом. ЧитатьКак решить Cloudflare Turnstile с помощью API.


Что вам нужно, прежде чем начать

Требование Подробности
CaptchaAI API-ключ Получите один изcaptchaai.com/api.php. Строка из 32 символов.
URL целевой страницы Полный URL-адрес страницы, защищенной Cloudflare.
Рабочий прокси HTTP, HTTPS, SOCKS4 или SOCKS5. Прокси-сервер должен иметь возможность доступа к целевому сайту.
Прокси включен в вашей учетной записи CaptchaAI Использование прокси отключено по умолчанию. Свяжитесь со службой поддержки CaptchaAI, чтобы включить ее перед вашим первым запросом.
Среда выполнения Python 3.7+ с requests или Node.js 18+ со встроенным fetch.

Важно! Прежде чем вы сможете использовать method=turnstile, в вашей учетной записи должна быть включена поддержка прокси-серверов. Если вы этого не сделали, сначала откройте заявку в службу поддержки на CaptchaAI.


Как идентифицировать страницу страница Cloudflare-защиты в staging

страница Cloudflare-защиты в staging отображается как полностраничное межстраничное объявление, а не как встроенный виджет. Признаки того, что вы столкнулись с этим:

  1. На странице отображается сообщение «Проверяем браузер…» или «Минуточку…» перед загрузкой контента.
  2. URL кратко показывает целевой путь, но ведет на страницу с заданием.
  3. Заголовки ответов включают cf-mitigated: challenge или статус ответа — 403 с идентификатором Cloudflare Ray.
  4. Тело HTML содержит <div id="challenge-body-text"> или ссылки на /cdn-cgi/challenge-platform/.
  5. После прохождения испытания в вашем браузере появится файл cookie qa_validation_cookie.

Если вместо этого вы видите небольшой виджет, встроенный в форму с флажком или счетчиком, то этоCloudflare Turnstile— другой тип CAPTCHA с другим методом решения.


Решение потока

Identify страница Cloudflare-защиты в staging page
              ↓
  POST to in.php
    method=turnstile
    pageurl + proxy + proxytype
              ↓
       receive captcha ID
              ↓
     wait 20 seconds
              ↓
  GET res.php (action=get, id=…, json=1)
      ↓                      ↓
 CAPCHA_NOT_READY       status=1
  (wait 5s, retry)           ↓
                  extract qa_validation_cookie + user_agent
                             ↓
              set cookie + User-Agent + same proxy
                             ↓
                   access protected page

Реализация Python

import time
import requests

API_KEY = "YOUR_CAPTCHAAI_API_KEY"
PAGE_URL = "https://example.com/protected-page"
PROXY = "user:password@123.123.123.123:8080"
PROXY_TYPE = "HTTP"

SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"


def solve_turnstile(api_key, pageurl, proxy, proxytype):
    """Solve a страница Cloudflare-защиты в staging and return qa_validation_cookie cookie + User-Agent."""

    # Step 1: Submit the task
    submit_resp = requests.post(
        SUBMIT_URL,
        data={
            "key": api_key,
            "method": "turnstile",
            "pageurl": pageurl,
            "proxy": proxy,
            "proxytype": proxytype,
            "json": 1,
        },
        timeout=30,
    )
    submit_resp.raise_for_status()
    submit_data = submit_resp.json()

    if submit_data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {submit_data}")

    captcha_id = submit_data["request"]
    print(f"Task created — captcha ID: {captcha_id}")

    # Step 2: Wait before first poll (страница Cloudflare-защиты в staging takes longer)
    time.sleep(20)

    # Step 3: Poll for result
    for _ in range(60):
        result_resp = requests.get(
            RESULT_URL,
            params={
                "key": api_key,
                "action": "get",
                "id": captcha_id,
                "json": 1,
            },
            timeout=30,
        )
        result_resp.raise_for_status()
        result_data = result_resp.json()

        if result_data.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue

        if result_data.get("status") == 1:
            return {
                "qa_validation_cookie": result_data["result"],
                "user_agent": result_data["user_agent"],
            }

        raise RuntimeError(f"Polling error: {result_data}")

    raise TimeoutError("страница Cloudflare-защиты в staging solve timed out")


# Solve the challenge
solution = solve_turnstile(API_KEY, PAGE_URL, PROXY, PROXY_TYPE)
print(f"qa_validation_cookie: {solution['qa_validation_cookie']}")
print(f"User-Agent: {solution['user_agent']}")

# Step 4: Access the protected page using the SAME proxy and User-Agent
session = requests.Session()
session.headers.update({"User-Agent": solution["user_agent"]})
session.cookies.set("qa_validation_cookie", solution["qa_validation_cookie"], domain="example.com")

proxies = {
    "http": f"http://{PROXY}",
    "https": f"http://{PROXY}",
}

response = session.get(PAGE_URL, proxies=proxies, timeout=30)
print(f"Status: {response.status_code}")
print(f"Content length: {len(response.text)} chars")

Что это делает:

  1. Отправляет запрос на in.php с method=turnstile, URL-адресом страницы и вашим прокси-сервером.
  2. Ожидает 20 секунд, затем опрашивает res.php каждые 5 секунд.
  3. Получает значение файла cookie qa_validation_cookie и строку User-Agent решателя.
  4. Делает запрос к защищенной странице, используя тот же прокси, файл cookie и пользовательский агент.

Критично: Файл cookie qa_validation_cookie привязан как к IP-адресу прокси, так и к агенту пользователя. Если что-то из этого изменится, Cloudflare отклонит запрос и снова покажет запрос.


Реализация Node.js

const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const PAGE_URL = "https://example.com/protected-page";
const PROXY = "user:password@123.123.123.123:8080";
const PROXY_TYPE = "HTTP";

const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function solveCloudflareChallenge(apiKey, pageurl, proxy, proxytype) {
  // Step 1: Submit the task
  const submitResp = await fetch(SUBMIT_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: new URLSearchParams({
      key: apiKey,
      method: "turnstile",
      pageurl: pageurl,
      proxy: proxy,
      proxytype: proxytype,
      json: "1",
    }),
  });

  const submitData = await submitResp.json();
  if (submitData.status !== 1) {
    throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
  }

  const captchaId = submitData.request;
  console.log(`Task created — captcha ID: ${captchaId}`);

  // Step 2: Wait before first poll
  await sleep(20_000);

  // Step 3: Poll for result
  for (let i = 0; i < 60; i++) {
    const resultResp = await fetch(
      `${RESULT_URL}?${new URLSearchParams({
        key: apiKey,
        action: "get",
        id: captchaId,
        json: "1",
      })}`
    );

    const resultData = await resultResp.json();

    if (resultData.request === "CAPCHA_NOT_READY") {
      await sleep(5_000);
      continue;
    }

    if (resultData.status === 1) {
      return {
        cfClearance: resultData.result,
        userAgent: resultData.user_agent,
      };
    }

    throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
  }

  throw new Error("страница Cloudflare-защиты в staging solve timed out");
}

(async () => {
  const solution = await solveCloudflareChallenge(
    API_KEY,
    PAGE_URL,
    PROXY,
    PROXY_TYPE
  );
  console.log(`qa_validation_cookie: ${solution.cfClearance}`);
  console.log(`User-Agent: ${solution.userAgent}`);

  // Step 4: Access protected page with cookie, User-Agent, and same proxy
  // Note: Node.js fetch does not natively support proxies.
  // Use a proxy agent library like undici, https-proxy-agent, or node-fetch with proxy.
  // Example with undici:
  //
  // import { ProxyAgent } from 'undici';
  // const proxyAgent = new ProxyAgent(`http://${PROXY}`);
  //
  // const response = await fetch(PAGE_URL, {
  //   headers: {
  //     'User-Agent': solution.userAgent,
  //     'Cookie': `qa_validation_cookie=${solution.cfClearance}`,
  //   },
  //   dispatcher: proxyAgent,
  // });

  console.log("Use the qa_validation_cookie cookie and User-Agent with the same proxy for all subsequent requests.");
})();

PHP-реализация

<?php
$apiKey    = "YOUR_CAPTCHAAI_API_KEY";
$pageUrl   = "https://example.com/protected-page";
$proxy     = "user:password@123.123.123.123:8080";
$proxyType = "HTTP";

// Step 1: Submit the task
$submit = file_get_contents("https://ocr.captchaai.com/in.php?" . http_build_query([
    "key"       => $apiKey,
    "method"    => "turnstile",
    "pageurl"   => $pageUrl,
    "proxy"     => $proxy,
    "proxytype" => $proxyType,
    "json"      => 1,
]));

$submitData = json_decode($submit, true);
if ($submitData["status"] !== 1) {
    die("Submit failed: " . $submit);
}

$captchaId = $submitData["request"];
echo "Task created — captcha ID: $captchaId\n";

// Step 2: Wait and poll
sleep(20);

$cfClearance = null;
$userAgent   = null;

for ($i = 0; $i < 60; $i++) {
    $result = file_get_contents("https://ocr.captchaai.com/res.php?" . http_build_query([
        "key"    => $apiKey,
        "action" => "get",
        "id"     => $captchaId,
        "json"   => 1,
    ]));

    $resultData = json_decode($result, true);

    if ($resultData["request"] === "CAPCHA_NOT_READY") {
        sleep(5);
        continue;
    }

    if ($resultData["status"] === 1) {
        $cfClearance = $resultData["result"];
        $userAgent   = $resultData["user_agent"];
        echo "qa_validation_cookie: $cfClearance\n";
        echo "User-Agent: $userAgent\n";
        break;
    }

    die("Polling error: " . $result);
}

if (!$cfClearance) {
    die("Solve timed out");
}

// Step 3: Access the protected page
$ch = curl_init($pageUrl);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_PROXY          => "123.123.123.123:8080",
    CURLOPT_PROXYUSERPWD   => "user:password",
    CURLOPT_HTTPHEADER     => ["User-Agent: $userAgent"],
    CURLOPT_COOKIE         => "qa_validation_cookie=$cfClearance",
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "Status: $httpCode\n";
echo "Content length: " . strlen($response) . " chars\n";

страница Cloudflare-защиты в staging против Cloudflare Turnstile

Это две разные защиты Cloudflare, требующие разных методов решения:

страница Cloudflare-защиты в staging Cloudflare Turnstile
Как это выглядит Полностраничное межстраничное объявление («Проверяем браузер…») Встроенный виджет в форму (флажок или счетчик)
Метод API turnstile turnstile
Требуется прокси? Да — обязательно Нет — опционально
Что вы получите взамен Файл cookie qa_validation_cookie + пользовательский агент токен Cloudflare Turnstile
Как использовать результат Установите cookie + User-Agent + один и тот же прокси для всех запросов. Вставьте токен в поле формы и отправьте
Привязка IP Файл cookie привязан к IP-адресу прокси-сервера. Токен не привязан к IP
Типичный вариант использования контролируемая проверка шлюза защиты от DDoS для очистки контента Отправьте защищенную форму (вход, регистрация, оформление заказа)

Если вы видите небольшой виджет, встроенный в форму, используйтеРуководство по решению Cloudflare Turnstileвместо.


Распространенные ошибки

# Ошибка Что происходит Исправить
1 Прокси не предоставлен API отклоняет запрос Добавьте к вашему запросу proxy и proxytype. Прокси обязателен для страница Cloudflare-защиты в staging.
2 Использование другого прокси для последующих запросов Cloudflare отклоняет файл cookie qa_validation_cookie Используйте один и тот же прокси для решения и для доступа к защищенной странице.
3 Использование другого пользовательского агента Cloudflare отклоняет запрос Используйте значение user_agent из ответа API, а не свой собственный пользовательский агент.
4 Не использую json=1 Ответ не включает поле user_agent. Всегда передавайте json=1, чтобы ответ включал как result (qa_validation_cookie), так и user_agent.
5 Прокси-сервер не включен в аккаунте API возвращает ошибку Прежде чем отправлять запросы, обратитесь в службу поддержки CaptchaAI, чтобы включить использование прокси-сервера в вашей учетной записи.
6 Срок действия файла cookie истек Доступ снова заблокирован через некоторое время Срок действия файлов cookie qa_validation_cookie истекает. Повторно решите проблему, когда запросы начинают блокироваться. Типичное время жизни составляет 15–30 минут.
7 Запутанная задача с Cloudflare Turnstile Отправлен неправильный метод, решение не выполнено Задача = полностраничное межстраничное объявление = turnstile. Cloudflare Turnstile = встроенный виджет = turnstile.

Поиск неисправностей

ERROR_BAD_PROXY

Отправленный вами прокси недоступен или помечен как плохой. Исправить:

  1. Проверьте прокси самостоятельно — сможет ли он дойти до целевого сайта?
  2. Попробуйте другой прокси.
  3. Убедитесь, что формат login:password@IP:PORT или IP:PORT для прокси-серверов с аутентификацией по IP.

ERROR_PROXY_CONNECTION_FAILED

CaptchaAI не удалось загрузить страницу конкурса через ваш прокси. Возможно, прокси-сервер временно отключен или целевой сайт блокирует его. Попробуйте другой прокси.

ERROR_CAPTCHA_UNSOLVABLE

Задача не могла быть решена. Распространенные причины:

  • Прокси-сервер слишком медленный или ненадежный.
  • Целевой сайт имеет дополнительную защиту помимо Cloudflare.
  • Повторите попытку с новым запросом и другим прокси.

Срок действия файла cookie истек, или Cloudflare поменял задачу. Повторно решите задачу, чтобы получить свежее печенье. Отслеживайте свой успех и активно решайте проблемы до истечения срока их действия.

В ответе отсутствует поле user_agent.

Вы не включили json=1 в свой запрос. Без json=1 ответ представляет собой обычный текст и не включает агент пользователя. Всегда используйте json=1 для страница Cloudflare-защиты в staging.

Проверьте все три требования:

  1. Тот же прокси, что и используемый решатель.
  2. Тот же пользовательский агент из поля ответа user_agent.
  3. Домен файлов cookie соответствует целевому сайту.

Если все три верны, и вы по-прежнему получаете ошибку 403, возможно, срок действия файла cookie истек. Решать.

Все коды ошибок CaptchaAI см.справочник по обработке ошибок(скоро) или документацию по API по адресуdocs.captchaai.com.


Почему CaptchaAI работает для страница Cloudflare-защиты в staging

Фактор Деталь
Полное решение для браузера CaptchaAI использует реальные экземпляры браузера для решения задачи Cloudflare JavaScript.
Возвращает все, что вам нужно qa_validation_cookie cookie + User-Agent в одном ответе
Поддержка прокси Работает с прокси-серверами HTTP, HTTPS, SOCKS4 и SOCKS5.
Тот же шаблон API Отправка опроса →. Поток результатов → идентичен всем другим типам, поддерживаемым CaptchaAI.
Цены Потоковые планы от $15/month

Полный работоспособный пример

Нужен полноценный рабочий проект с настройкой среды, опросом, повторными попытками и обработкой ошибок?

Полный работоспособный пример см. на GitHub →.


Часто задаваемые вопросы

Что такое страница страница Cloudflare-защиты в staging?

Это полностраничное межстраничное объявление, которое отображается на веб-сайтах, использующих защиту от ботов Cloudflare. На странице отображается сообщение «Проверка браузера…» или «Минутку…» и блокируется доступ до тех пор, пока браузер не пройдет проверку JavaScript, проверку сигналы браузера или виджет Cloudflare Turnstile.

Что возвращает API для страница Cloudflare-защиты в staging?

Два значения: (1) qa_validation_cookie — файл cookie, предоставляющий доступ к защищенному сайту, и (2) user_agent — точная строка User-Agent, использованная решателем. Оба должны быть включены в ваши последующие запросы.

Зачем нужен прокси?

Cloudflare привязывает файл cookie qa_validation_cookie к IP-адресу, который решил проблему. Если вы решите с IP-адреса CaptchaAI, но затем зайдете на сайт со своего собственного IP-адреса, файл cookie будет отклонен. Предоставляя собственный прокси-сервер, решатель использует ваш IP-адрес, а файл cookie обрабатывает все ваши запросы через этот прокси.

Обычно это 15–30 минут, но это зависит от сайта. Некоторые сайты устанавливают более длительный срок действия. Отслеживайте свои запросы и принимайте повторные решения, когда снова начнете получать ответы 403.

Могу ли я решить страница Cloudflare-защиты в staging без прокси?

Нет. Для этого типа CAPTCHA необходим прокси-сервер. CaptchaAI требует этого, поскольку Cloudflare обеспечивает согласованность IP между решателем и последующими запросами.

В чем разница между страница Cloudflare-защиты в staging и Cloudflare Turnstile?

Challenge – это полностраничное межстраничное объявление, блокирующее любой доступ. Cloudflare Turnstile – это встроенный виджет определенной формы. Они используют разные методы API (turnstile и turnstile), и Challenge требует прокси-сервера, а Turnstile — нет. См. сравнительную таблицу выше.


Начните решать страница Cloudflare-защиты в staging

  1. Включить поддержку прокси — обратитесь в службу поддержки CaptchaAI, если она еще не включена.
  2. Получите ключ APIcaptchaai.com/api.php
  3. Подготовьте прокси — HTTP/HTTPS/SOCKS4/SOCKS5, должен иметь возможность доступа к целевому сайту.
  4. Скопируйте приведенный выше код Python, Node.js или PHP — замените заполнители своим ключом, URL-адресом и прокси-сервером.
  5. Использовать возвращенный qa_validation_cookie + User-Agent + тот же прокси для всех последующих запросов.

Если у вас возникли проблемы, проверьте раздел устранения неполадок выше или полностьюстраница Cloudflare-защиты в staging Ошибки и исправлениягид.

Похожие статьи

Комментарии для этой статьи отключены.