Если вместо сайта браузер показывает «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
- Запрос перехвачен — обратный прокси Cloudflare оценивает запрос до того, как он дойдёт до сайта.
- Оценка риска — анализируются IP, заголовки, TLS-отпечаток и поведение клиента.
- Показ Challenge — при подозрении вместо ответа сайта отдаётся страница проверки.
- Проверка в браузере — выполняются JS-вызовы, которые headless-браузеры без полного рендеринга не проходят.
- Установка cookie — при успехе выдаётся
qa_validation_cookieс настраиваемым сроком жизни. - Доступ открыт — браузер перезагружается и получает исходный контент.
Cookie qa_validation_cookie: что внутри
После прохождения проверки браузер получает 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.
Использование cookie qa_validation_cookie
# 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 и его автоматизацию:
Сколько живёт cookie qa_validation_cookie?
От 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-адресу решения, поэтому прокси нужен даже для одной задачи.