Технические разборы

страница Cloudflare-защиты в staging qa_validation_cookie Руководство по файлам cookie

Когда Cloudflare помечает посетителя как подозрительного, он открывает промежуточную страницу с запросом. После решения браузер получает файл cookie qa_validation_cookie, который предоставляет доступ к сеансу. В этом руководстве объясняется, как работает поток задач и как CaptchaAI с ним справляется.


Как работают страницы страница Cloudflare-защиты в staging

  1. Пользователь запрашивает страницу, защищенную Cloudflare.
  2. Cloudflare оценивает сигналы риска (репутация IP, заголовки, TLS-сигналы)
  3. Если этот флажок установлен, Cloudflare возвращает 403 или 503 со страницей вызова JavaScript.
  4. На странице вызова выполняются проверки браузера и может отображаться виджет Cloudflare Turnstile.
  5. В случае успеха Cloudflare устанавливает qa_validation_cookie и перенаправляет на исходный URL-адрес.
  6. Последующие запросы с использованием cookie проходят без проблем.

Свойство Подробности
Имя qa_validation_cookie
Домен Домен целевого сайта (например, .example.com)
Путь /
Продолжительность жизни Обычно от 30 минут до 24 часов
HttpOnly Да
Безопасный Да (только HTTPS)
Тот же сайт Никто

Файл cookie связан с несколькими факторами:

  • IP-адрес — использование файла cookie с другого IP-адреса обычно не работает.
  • Агент пользователя — должен соответствовать UA, используемому при решении задач.
  • TLS-сигналы — некоторые конфигурации привязываются к TLS ClientHello.

Типы испытаний

Cloudflare предлагает различные уровни сложности:

Испытание Код ответа Взаимодействие с пользователем Описание
JS-вызов 503 Никто Только выполнение JavaScript
Управляемый вызов 403 Может быть Cloudflare решает — может показать Cloudflare Turnstile или пройти молча
Интерактивный вызов 403 Да Всегда показывает виджет Cloudflare Turnstile

CaptchaAI решает все три типа с помощью решателя страница Cloudflare-защиты в staging.


Решение с помощью CaptchaAI

Питон

import requests
import time

API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"

# Submit страница Cloudflare-защиты в staging task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x0000000000000000000000",  # may be generic for CF challenge
    "pageurl": TARGET_URL,
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Task ID: {task_id}")

# Poll for result
for _ in range(30):
    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["status"] == 1:
        token = result["request"]
        print(f"Token received: {token[:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

JavaScript

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';

const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'turnstile',
    sitekey: '0x0000000000000000000000',
    pageurl: TARGET_URL,
    json: 1,
  }
});
const taskId = submit.data.request;

// Poll
let token = null;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    token = poll.data.request;
    break;
  }
}
console.log(`Token: ${token.substring(0, 50)}...`);

Использование решенного токена

После решения введите токен на страницу задания, чтобы получить qa_validation_cookie:

# With Selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(TARGET_URL)  # Load the challenge page

# Inject token into Turnstile response field
driver.execute_script("""
    const input = document.querySelector('input[name="cf-turnstile-response"]');
    if (input) input.value = arguments[0];

    // Trigger form submit or callback
    const form = document.querySelector('form');
    if (form) form.submit();
""", token)

# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
qa_validation_cookie = next(
    (c for c in cookies if c['name'] == 'qa_validation_cookie'), None
)
if qa_validation_cookie:
    print(f"qa_validation_cookie: {qa_validation_cookie['value'][:30]}...")
session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie["value"], domain=".example.com")
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code)  # 200

Срок действия файла cookie qa_validation_cookie истекает. План повторного решения:

import datetime

def is_cookie_valid(cookie):
    if not cookie:
        return False
    expiry = cookie.get("expiry", 0)
    return datetime.datetime.now().timestamp() < expiry - 60  # 60s buffer

def get_or_refresh_clearance(driver, target_url, solve_func):
    cookies = driver.get_cookies()
    cf = next((c for c in cookies if c["name"] == "qa_validation_cookie"), None)
    if is_cookie_valid(cf):
        return cf["value"]

    # Re-solve
    token = solve_func(target_url)
    # ... inject and extract new cookie

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

Проблема Причина Исправить
Файл cookie отклонен после решения несоответствие IP-адресов Используйте один и тот же прокси для решения и запросов
Срок действия файла cookie быстро истекает Короткий срок жизни, установленный сайтом Повторно решить до истечения срока действия; проверьте поле expiry
403, несмотря на действительный файл cookie Несоответствие пользовательского агента Сопоставление UA между сеансами решения и запроса
Страница конкурса не загружается JavaScript отключен Используйте полноценный браузер (Selenium, Puppeteer)

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

Только если у них один и тот же IP-адрес и вы соответствуете строке User-Agent. Cloudflare часто привязывает файл cookie к исходному IP-адресу.

Обычно от 30 минут до 24 часов, в зависимости от конфигурации Cloudflare владельца сайта.


Решите страницы страница Cloudflare-защиты в staging с помощью CaptchaAI

Получите ключ API по адресуcaptchaai.com.


Связанные руководства

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