Большинство сбоев Cloudflare Turnstile не случайны. Они делятся на три категории: ошибки на этапе запроса (ваша отправка в API отклонена), ошибки на этапе результата (сбой опроса или тайм-аут) и сбои проверки целевой страницы (API возвращает действительный токен, но страница по-прежнему его отклоняет).
Три самые большие проблемы, связанные с турникетами:
- Неправильный точный URL-адрес страницы — особенно на страницах заданий Cloudflare, где контекст более строгий.
- Неправильный ключ сайта — получено из неправильного элемента или другого экземпляра виджета.
- Токен применен по неправильному пути — страница ожидает
cf-turnstile-response, обратный вызов или и то, и другое.
CaptchaAI решает Cloudflare Turnstile с помощью100% вероятность успехаменее чем за 10 секунд. Когда ваша интеграция не удалась, проблема почти всегда заключается в отправляемых вами параметрах или в том, как вы применяете возвращенный токен.
Точки отказа Cloudflare Turnstile
Прежде чем углубляться в коды ошибок, поймите три вещи, которые отличают Turnstile от других типов капчи:
1. Точный URL-адрес страницы имеет большее значение
Токены Cloudflare Turnstile тесно привязаны к контексту страницы. На страницах запроса Cloudflare (полностраничный экран проверки) использование неправильного URL-адреса — даже немного другого пути — приведет к отклонению токена.
2. Два пути применения токенов
Возвращенный токен можно применить двумя способами, и использование неправильного приведет к неудаче:
| Метод | Когда использовать |
|---|---|
Скрытое поле — вставьте в cf-turnstile-response (а иногда и в g-recaptcha-response) |
Когда на странице используется стандартная форма со скрытым вводом |
Функция обратного вызова — вызов функции, определенной в turnstile.render() или data-callback. |
Когда на странице вместо формы используется программная проверка |
3. Токены одноразовые.
токен Cloudflare Turnstile можно проверить только один раз. Если ваша система автоматизации случайно отправит его дважды или возникнет состояние гонки, вторая попытка завершится неудачей.
Ошибки на этапе запроса
Это происходит при отправке задачи в https://ocr.captchaai.com/in.php.
ERROR_WRONG_USER_KEY
Причина: неправильный формат ключа API (должен быть 32 символа).
Исправление: проверьте ключ отcaptchaai.com/api.php.
ERROR_KEY_DOES_NOT_EXIST
Причина: Ключ отформатирован правильно, но не привязан к активной учетной записи.
Исправление. Проверьте панель управления. Убедитесь, что учетная запись активна и ключ правильный.
ERROR_ZERO_BALANCE
Причина: в вашем плане нет бесплатных тем.
Исправление. Подождите, пока потоки освободятся, уменьшите параллелизм или обновите их.
ERROR_PAGEURL
Причина: Параметр pageurl отсутствует.
Исправление: Добавьте полный URL — протокол, домен и путь:
pageurl=https://https://staging.example.com/qa-login
ERROR_BAD_PARAMETERS
Причина: Обязательные параметры отсутствуют или имеют неправильный формат. Для Cloudflare Turnstile обязательные параметры:
| Параметр | Тип | Необходимый | Описание |
|---|---|---|---|
key |
Нить | Да | Ваш API-ключ CaptchaAI |
method |
Нить | Да | Должно быть turnstile |
sitekey |
Нить | Да | Виджет Cloudflare Turnstile sitekey |
pageurl |
Нить | Да | Полный URL-адрес страницы |
Необязательно, но полезно:
| Параметр | Тип | Описание |
|---|---|---|
action |
Нить | Значение data-action или параметра action из turnstile.render(). |
proxy |
Нить | Формат: login:password@IP:PORT |
proxytype |
Нить | HTTP, HTTPS, SOCKS4, SOCKS5 |
Исправление. Убедитесь, что все обязательные поля присутствуют и правильно введены.
HTML или 500/502 ответы
Причина: Временная ошибка на стороне сервера.
Исправление. Подождите 5–10 секунд и повторите попытку.
Как найти ключ от Cloudflare Turnstile
Ключ сайта — наиболее часто неправильный параметр. Вот где его найти:
Вариант 1 — атрибут data-sitekey:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAB1example"></div>
Вариант 2 — вызов turnstile.render():
turnstile.render('#captcha-container', {
sitekey: '0x4AAAAAAAB1example',
callback: function(token) {
document.getElementById('cf-turnstile-response').value = token;
}
});
Вариант 3 — перехват вызова рендеринга (дополнительный):
Если ключ сайта загружается динамически, вы можете переопределить turnstile.render перед инициализацией виджета для захвата параметров:
// Inject this before the Turnstile script loads
const originalRender = window.turnstile.render;
window.turnstile.render = function(container, params) {
console.log('Sitekey:', params.sitekey);
console.log('Action:', params.action);
return originalRender.call(this, container, params);
};
Ошибки на этапе результата
Это происходит при опросе https://ocr.captchaai.com/res.php.
CAPCHA_NOT_READY
Это не ошибка. Решение еще продолжается. Решение Cloudflare Turnstile на CaptchaAI обычно занимает менее 10 секунд.
Исправление: подождите 5 секунд и повторите опрос.
ERROR_WRONG_ID_FORMAT
Причина: Идентификатор капчи содержит нечисловые символы.
Исправление: Используйте точный идентификатор, возвращаемый in.php, без изменений.
ERROR_WRONG_CAPTCHA_ID
Причина: Идентификатор не соответствует ни одной отправленной задаче.
Исправление. Убедитесь, что вы запрашиваете правильный идентификатор из ответа на отправку.
ERROR_EMPTY_ACTION
Причина: В вашем запросе на опрос отсутствует параметр action.
Исправление: Всегда включайте action=get:
https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID&json=1
Примечание. Для Cloudflare Turnstile всегда используйте
json=1в запросе на опрос. Ответ JSON может включатьuser_agentрешателя, который требуется некоторым страницам, защищенным Cloudflare, для успешной проверки токена.
ERROR_CAPTCHA_UNSOLVABLE
Причина: Не удалось решить проблему — возможно, неправильный ключ сайта или неподдерживаемая конфигурация страницы.
Исправление. Проверьте ключ сайта, обновите запрос и повторите попытку.
ERROR_INTERNAL_SERVER_ERROR
Причина: Проблема на стороне сервера.
Исправление: подождите 10 секунд и повторите попытку.
Сбои проверки целевой страницы
Их труднее всего отладить, поскольку API успешно возвращает токен, но целевая страница его отклоняет.
Ошибка 1: токен вставлен в неправильное поле.
Симптом: Форма отправляется, но страница возвращает ошибку проверки или обновляется.
Страницы Cloudflare Turnstile могут ожидать токен в разных полях:
cf-turnstile-response— основной скрытый вход Cloudflare Turnstileg-recaptcha-response— некоторые страницы используют это как запасной вариант.
Исправление. Проверьте форму страницы на наличие обоих полей. В автоматизации браузера:
# Selenium — inject into both fields for safety
driver.execute_script("""
var cfField = document.querySelector('[name="cf-turnstile-response"]');
var gField = document.querySelector('[name="g-recaptcha-response"]');
if (cfField) cfField.value = arguments[0];
if (gField) gField.value = arguments[0];
""", token)
Ошибка 2: обратный вызов не запущен.
Симптом: Токен указан в поле, но форма по-прежнему блокирует отправку.
Причина: На странице используется функция обратного вызова вместо скрытого поля (или в дополнение к нему). Обратный вызов обрабатывает дополнительную логику, например включение кнопки отправки или отправку запроса AJAX.
Исправление. Найдите и вызовите обратный вызов:
// Check data-callback attribute
const callbackName = document.querySelector('.cf-turnstile').getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
}
// Or if it was passed in turnstile.render()
// You may need to intercept the render call to capture it
Ошибка 3: неверный точный контекст страницы.
Признак: Токен отклонен, несмотря на правильный ключ сайта и новое решение.
Причина: pageurl, используемый в запросе API, не соответствует фактическому контексту страницы. Это особенно характерно для:
- Страницы задач Cloudflare — URL-адрес может включать важные параметры запроса или компоненты пути.
- Одностраничные приложения — видимый URL-адрес может отличаться от URL-адреса, по которому был загружен виджет «Cloudflare Turnstile».
Исправление. Используйте вкладку «Сеть» DevTools, чтобы найти точный URL-адрес, с которого загружается виджет «Cloudflare Turnstile». Используйте этот URL как pageurl.
Ошибка 4: повторное использование токена
Симптом: Первое решение работает, последующие не работают.
Причина: токены Cloudflare Turnstile одноразовые. После проверки сервером Cloudflare токен становится недействительным.
Исправление: запрашивайте новое решение для каждой отправки формы. Не кэшируйте и не используйте токены повторно.
Краткий справочник по устранению ошибок
| Ошибка/симптом | Этап | Вероятная причина | Исправить |
|---|---|---|---|
ERROR_WRONG_USER_KEY |
Представлять на рассмотрение | Неверный ключ API | Проверьте 32-значный ключ |
ERROR_KEY_DOES_NOT_EXIST |
Представлять на рассмотрение | Неверный ключ | Проверьте панель управления |
ERROR_ZERO_BALANCE |
Представлять на рассмотрение | Нет бесплатных тем | Подождите или обновите план |
ERROR_PAGEURL |
Представлять на рассмотрение | Отсутствует pageurl |
Добавить полный URL |
ERROR_BAD_PARAMETERS |
Представлять на рассмотрение | Отсутствует ключ сайта, метод или URL-адрес страницы. | Проверьте все обязательные поля |
CAPCHA_NOT_READY |
Голосование | Решение в процессе | Подождите 5 секунд, повторите попытку. |
ERROR_WRONG_ID_FORMAT |
Голосование | Нечисловой идентификатор капчи | Используйте точный идентификатор из in.php. |
ERROR_WRONG_CAPTCHA_ID |
Голосование | Неверный идентификатор капчи | Проверьте идентификатор отправки |
ERROR_EMPTY_ACTION |
Голосование | Отсутствует action=get |
Добавить параметр действия |
| Токен отклонен страницей | Валидация | Неверное поле, обратный вызов не запущен, неверный URL. | Проверьте имя поля, выполните обратный вызов, проверьте точный URL-адрес страницы. |
| Второе решение не удалось | Валидация | Повторное использование токенов | Запросить новый токен для каждой отправки |
Python: полное решение Cloudflare Turnstile
import time
import requests
API_KEY = "YOUR_CAPTCHAAI_API_KEY"
SITEKEY = "0x4AAAAAAAB1example"
PAGE_URL = "https://https://staging.example.com/qa-login"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_turnstile(api_key, sitekey, pageurl):
"""Submit a Turnstile challenge and return the solved token."""
# Submit
submit_resp = requests.post(
SUBMIT_URL,
data={
"key": api_key,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": pageurl,
"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}")
# Wait before first poll (Turnstile is fast — 10 seconds is usually enough)
time.sleep(10)
# 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 result_data["request"]
raise RuntimeError(f"Polling error: {result_data}")
raise TimeoutError("Turnstile solve timed out")
# Usage
token = solve_turnstile(API_KEY, SITEKEY, PAGE_URL)
print(f"Solved token: {token[:80]}...")
# Inject into cf-turnstile-response and/or g-recaptcha-response
# Then submit the form
Node.js: полное решение проблемы Cloudflare Turnstile
const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SITEKEY = "0x4AAAAAAAB1example";
const PAGE_URL = "https://https://staging.example.com/qa-login";
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 solveTurnstile(apiKey, sitekey, pageurl) {
// Submit
const submitResp = await fetch(SUBMIT_URL, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: apiKey,
method: "turnstile",
sitekey: sitekey,
pageurl: pageurl,
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}`);
// Turnstile is fast — wait 10 seconds before first poll
await sleep(10_000);
// 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 resultData.request;
}
throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
}
throw new Error("Turnstile solve timed out");
}
// Usage
solveTurnstile(API_KEY, SITEKEY, PAGE_URL)
.then((token) => {
console.log(`Solved token: ${token.slice(0, 80)}...`);
// Inject into cf-turnstile-response and/or g-recaptcha-response
})
.catch(console.error);
Cloudflare Turnstile против страница Cloudflare-защиты в staging: с чем вы столкнулись?
| Сигнал | Cloudflare Turnstile | страница Cloudflare-защиты в staging |
|---|---|---|
| Что вы видите | Встроенный виджет на странице (флажок или невидимый) | Полностраничный экран проверки Cloudflare |
| Что возвращает CaptchaAI | Токен для внедрения в форму | Файл cookie qa_validation_cookie |
| Метод API | turnstile |
turnstile |
| Требуется прокси? | Необязательный | Да (обязательно) |
Если вы выполняете полностраничный вызов Cloudflare (а не встроенный виджет), вам понадобитсястраница Cloudflare-защиты в staging Решательвместо этого он возвращает файл cookie qa_validation_cookie и требует прокси-сервера.
Часто задаваемые вопросы
Почему Turnstile терпит неудачу, даже если запрос выглядит правильно?
Три наиболее распространенные причины: (1) pageurl немного неправильный — особенно на страницах задач Cloudflare, (2) ключ сайта был получен из неправильного элемента или (3) токен вводится в неправильное поле или путь обратного вызова.
Какая самая распространенная ошибка Cloudflare Turnstile?
Использование неправильного точного URL-адреса страницы. Токены Cloudflare Turnstile жестко привязаны к контексту страницы — даже другой путь или отсутствующий параметр запроса могут привести к отклонению.
Что означает CAPCHA_NOT_READY?
Решение все еще продолжается. Подождите 5 секунд и повторите опрос. Решение Cloudflare Turnstile обычно выполняется менее чем за 10 секунд.
Что делать, если API возвращает токен, но страница по-прежнему его отклоняет?
- Убедитесь, что
pageurlсоответствует точной странице, на которой загружается виджет. - Проверьте, ожидает ли страница токен в
cf-turnstile-response,g-recaptcha-responseили в обоих. - Проверьте, использует ли страница функцию обратного вызова вместо (или в дополнение) скрытого поля.
- Убедитесь, что токен используется только один раз — токены Cloudflare Turnstile одноразовые.
Поддерживает ли CaptchaAI прокси для Turnstile?
Да. Добавьте к вашему запросу proxy и proxytype. Прокси-серверы не являются обязательными для отдельных виджетов Cloudflare Turnstile, но рекомендуются на страницах задач Cloudflare.
В чем разница между Cloudflare Turnstile и страница Cloudflare-защиты в staging?
Cloudflare Turnstile — это встроенный виджет, который возвращает токен. страница Cloudflare-защиты в staging — это полностраничная проверка, которая возвращает файл cookie qa_validation_cookie. Они используют разные методы API и разные шаблоны интеграции, хотя оба являются продуктами Cloudflare.
Исправьте рабочий процесс вашего Cloudflare Turnstile
Если интеграция Cloudflare Turnstile не удалась:
- Проверьте ключ сайта — извлеките его из
data-sitekeyилиturnstile.render(). - Проверьте URL-адрес страницы – используйте точный URL-адрес, включая протокол и путь.
- Проверьте путь токена — использует ли страница
cf-turnstile-response,g-recaptcha-responseили обратный вызов? - Используйте
json=1— Всегда используйте ответы JSON при опросе результатов Cloudflare Turnstile. - Не используйте токены повторно — запрашивайте новое решение для каждой отправки.
Начните сCaptchaAI Решатель Cloudflare Turnstile, сверьте свои параметры сДокументация по APIи читатьКак работает Cloudflare Turnstileесли вам нужен опыт работы с виджетами.
Журнал итераций
| Итерация | Фокус | Изменения |
|---|---|---|
| Проект 1 | Структура и содержание | Первоначальный вариант устранения неполадок — 3 стадии ошибок, таблица ошибок, которые нужно исправить, часто задаваемые вопросы |
| Проект 2 | Техническая точность | Проверены коды ошибок, параметры Cloudflare Turnstile и пути токенов по captchaai.com/api-docs. Добавлены таблицы параметров. Подтверждены поля method=turnstile и оба поля cf-turnstile-response/g-recaptcha-response. |
| Проект 3 | Код и глубина внедрения | Добавлены примеры решения Python и Node.js. Добавлены методы извлечения ключа сайта (3 подхода). Добавлен код внедрения Selenium для обоих полей токена. Добавлен код обнаружения обратного вызова. |
| Проект 4 | Содержание дифференциации | Добавлена сравнительная таблица Cloudflare Turnstile и страница Cloudflare-защиты в staging. Добавлено примечание к требованию json=1 для user_agent. Добавлена техника перехвата рендеринга для динамических ключей сайта. |
| Проект 5 | Финальная проверка качества | Проверено, что все коды ошибок соответствуют официальным документам. Добавлена краткая справочная таблица. Затянутое вступление. Добавлено предупреждение об одноразовом токене. Подтвержденные перекрестные ссылки на статьи кластера. Ответы на часто задаваемые вопросы готовы к использованию в виде схемы. |
Краткое описание визуальных активов
Изображение героя
- Замещающий текст: Устранение ошибок разработчиком Cloudflare Turnstile — поток запросов, передача токена во внутренний QA endpoint и сбои проверки.
- Необходимо показать: Последовательность действий по устранению технических неполадок с указанием стадий ошибок и способов их устранения.
- Имя файла: cloudflare-turnstile-errors-troubleshooting-hero.png
Визуализация в статье 1
- Место размещения: После «Ошибок на этапе результата».
- Тип: Дерево решений
- Замещающий текст: Дерево решений для сбоев Cloudflare Turnstile — ошибки запроса, ошибки опроса и отклонение страницы.
- Имя файла: cloudflare-turnstile-error-decision-tree.png
Визуализация в статье 2
- Место размещения: После сообщения «Ошибки проверки целевой страницы».
- Тип: Диаграмма причин и исправлений
- Альтернативный текст: Диаграмма, показывающая, почему токены Cloudflare Turnstile отклоняются, и способы устранения каждой причины.
- Имя файла: cloudflare-turnstile-validation-causes-fixes.png