Explainers

Как работает Cloudflare Challenge

Если вместо сайта браузер показывает «Checking your browser before accessing...» или «Verify you are human», сработал Cloudflare Challenge — полностраничная проверка, которую Cloudflare ставит перед сайтом при подозрительном трафике. Это не Cloudflare Turnstile: Turnstile — виджет внутри страницы, а Challenge блокирует весь запрос, пока браузер не подтвердит, что за ним не стоит скрипт. После успеха выдаётся cookie, которая на время снимает повторные проверки — в статье она обозначена как qa_validation_cookie.


Cloudflare Challenge, Turnstile и тихая JS-проверка: в чём разница

Параметр Cloudflare Challenge Cloudflare Turnstile JS-проверка
Формат Полностраничная заглушка Виджет внутри страницы Незаметная проверка
Что видит пользователь Страницу «Checking your browser» Чекбокс или ничего Ничего
Блокирует доступ к странице Да Нет Кратковременно
Ставит qa_validation_cookie Да Иногда Да
Нужен прокси для решения Да Нет Не применимо
Требует Cloudflare как CDN сайта Обязательно Не обязательно Обязательно

Challenge — самый строгий из трёх: только он полностью блокирует страницу до подтверждения.


Что запускает Cloudflare Challenge

Cloudflare решает, кому показывать Challenge, на основе набора сигналов:

Триггер Описание
IP дата-центра Запрос идёт от известного хостинг-провайдера, а не от домашнего/мобильного оператора
Отсутствующие заголовки Нет ожидаемых или есть нетипичные HTTP-заголовки
TLS-отпечаток JA3/JA4-сигнатура совпадает с известными подписями ботов
Высокая частота запросов Слишком много запросов с одного IP за короткое время
Уровень безопасности сайта Владелец сайта поднял порог проверки в настройках Cloudflare
Гео-правила Правила блокировки или проверки по стране
Bot score ML-оценка Cloudflare для клиента ниже порога
Репутация IP Адрес числится в списках угроз threat intelligence

Ни один сигнал сам по себе не решает — Cloudflare комбинирует их и сверяет с порогом сайта.


Как проходит проверка

Request → Cloudflare proxy → Suspicious? → Challenge page
                                              ↓
                                    Browser verification
                                              ↓
                                    qa_validation_cookie cookie set
                                              ↓
                                    Original page loads
  1. Запрос перехвачен — обратный прокси Cloudflare оценивает запрос до того, как он дойдёт до сайта.
  2. Оценка риска — анализируются IP, заголовки, TLS-отпечаток и поведение клиента.
  3. Показ Challenge — при подозрении вместо ответа сайта отдаётся страница проверки.
  4. Проверка в браузере — выполняются JS-вызовы, которые headless-браузеры без полного рендеринга не проходят.
  5. Установка cookie — при успехе выдаётся qa_validation_cookie с настраиваемым сроком жизни.
  6. Доступ открыт — браузер перезагружается и получает исходный контент.

После прохождения проверки браузер получает cookie такого вида:

qa_validation_cookie=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
Свойство Значение
Срок действия От 15 минут до 24 часов, настраивает владелец сайта
Область действия Привязан к конкретному домену
Привязка Закреплён за User-Agent и IP-адресом проверки
Использование Нужен во всех последующих запросах, иначе проверка запустится снова

Важно: смена User-Agent или IP делает cookie недействительным.


Как решить Cloudflare Challenge через API CaptchaAI

Решение требует прокси, потому что qa_validation_cookie привязан к IP-адресу проверки.

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "turnstile",
    "pageurl": "https://example.com/protected-page",
    "proxy": "username:[email protected]:8080",
    "proxytype": "HTTP",
    "json": 1
})

task_id = response.json()["request"]

# Poll for result
for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()

    if result.get("status") == 1:
        solution = result["request"]
        # solution contains qa_validation_cookie cookie + user_agent
        print(f"qa_validation_cookie: {solution}")
        break

Node.js

const axios = require('axios');

async function solveCloudflareChallenge(pageurl, proxy) {
  const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
    params: {
      key: 'YOUR_API_KEY',
      method: 'turnstile',
      pageurl,
      proxy,
      proxytype: 'HTTP',
      json: 1
    }
  });

  const taskId = data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const res = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
    });
    if (res.data.status === 1) return res.data.request;
  }
  throw new Error('Timeout');
}

Оба примера отправляют задачу с прокси и опрашивают res.php раз в 5 секунд до status: 1.

# After getting the solution
qa_validation_cookie = solution["qa_validation_cookie"]
user_agent = solution["user_agent"]

# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:[email protected]:8080"}

# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")

Частая ошибка интеграции: cookie получают, но переиспользуют его с другим прокси или без исходного User-Agent — Cloudflare тут же отклоняет запрос.


Зачем обязательно нужен прокси

qa_validation_cookie криптографически завязан сразу на три параметра клиента:

Параметр Требование
IP-адрес Решение должно происходить с того же адреса, который вы используете дальше
User-Agent Строка при решении должна совпадать со строкой в последующих запросах
TLS-отпечаток Часть конфигураций Cloudflare дополнительно сверяет TLS-рукопожатие

Если хоть один параметр отличается, cookie недействителен. Частый случай: команда разворачивает парсер в европейском дата-центре — во Франкфурте или Амстердаме, — а прокси для решения берёт из другого пула IP. Cloudflare видит два разных адреса на одну сессию и блокирует запрос заново, хотя задача решена корректно. Правило простое: один прокси и один User-Agent — и на решении, и на запросах к сайту.


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

Вопросы, которые чаще всего задают про Cloudflare Challenge и его автоматизацию:

От 15 минут до 24 часов — значение задаёт владелец сайта. После истечения срока задачу нужно решать заново.

Почему Cloudflare Challenge показывается не на каждый запрос?

Проверка запускается, когда сигналы (IP дата-центра, заголовки, TLS-отпечаток, частота запросов, bot score) в сумме превышают порог сайта.

В чём разница между Cloudflare Challenge и Turnstile?

Challenge — полностраничная заглушка, блокирующая доступ ко всей странице до прохождения проверки. Turnstile — встроенный виджет, похожий по идее на reCAPTCHA, и не требует, чтобы сайт стоял за Cloudflare как за прокси.

Сколько стоит решать Cloudflare Challenge через CaptchaAI?

Тарификация у CaptchaAI идёт по потокам, а не по числу решённых задач:

План Цена Потоки
BASIC $15/мес 5
ADVANCE $90/мес 50
VIP-3 $7,500/мес 5000

Прокси в стоимость плана не входит.

Можно ли обойтись без прокси при разовом решении?

Нет: qa_validation_cookie привязан к IP-адресу решения, поэтому прокси нужен даже для одной задачи.


Связанные материалы

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