Эта статья была полезной?
Как решить Cloudflare Turnstile на сайте copilot.microsoft.com
Технический специалист
Введение
Если вы интегрируете автоматическое решение капчи Cloudflare Turnstile для copilot.microsoft.com и получаете токены, которые сайт отклоняет, это руководство для вас.
Сервис RuCaptcha поддерживает решение Turnstile через API v2 с минимальным набором параметров. Для стандартной реализации на copilot.microsoft.com достаточно передать websiteKey и websiteURL, но критически важно синхронизировать User-Agent между запросами.
Материал содержит общие рекомендации по настройке задачи, анализу страницы и отладке интеграции.
Общие сведения
Cloudflare Turnstile — токенизированная система защиты, которая заменяет традиционные капчи на невидимые или интерактивные виджеты. Виджет генерирует токен после проверки поведения пользователя и окружения браузера.
Особенности Turnstile на copilot.microsoft.com
| Параметр | Значение | Примечание |
|---|---|---|
websiteKey |
0x4AAAAAAAg146IpY3lPNWte |
Извлекается из атрибута data-sitekey |
websiteURL |
https://copilot.microsoft.com/chats/... |
Полная ссылка на страницу с капчей |
| Тип задачи | TurnstileTask |
Стандартный режим, не Challenge |
| Дополнительные параметры | Не требуются | pagedata, action, data можно не передавать |
Почему токен может не приниматься сайтом
Даже при корректно полученном токене сайт может отклонить запрос. Основные причины:
| Причина | Как проверить | Решение |
|---|---|---|
| Несоответствие User-Agent | Сравнить UA в запросе и в ответе API | Использовать userAgent из ответа RuCaptcha |
| Рассинхрон сессии | Проверить куки и заголовки | Переиспользовать контекст браузера |
| Блокировка по IP | Протестировать без прокси или с другим гео | Использовать резидентный прокси |
| Преждевременная отправка | Проверить, загружена ли форма | Добавить ожидание элемента перед инъекцией |
| Неверный способ отправки токена | Решите капчу вручную и изучите с помощью инструментов разработчика сетевые запросы | Внедрите этот способ в ваше решение |
Подготовка окружения
Перед началом работы убедитесь, что у вас есть:
- Доступ к API RuCaptcha — API-ключ из личного кабинета
- Инструменты для автоматизации браузера — Playwright, Puppeteer или Selenium
- Актуальный User-Agent — строка из реального браузера, от имени которого идёт запрос
- Прокси (опционально) — резидентный, с геолокацией, соответствующей целевому сайту
Требования к прокси (если используется)
| Требование | Описание |
|---|---|
| Тип | Резидентный (residential) или мобильный |
| Протокол | HTTP/HTTPS |
| Геолокация | Соответствует целевому сайту (US, EU) |
| Аутентификация | По логину/паролю или по IP |
| Стабильность | Минимальное время отклика, отсутствие частых разрывов |
Анализ страницы и извлечение параметров
Определение наличия капчи
На copilot.microsoft.com капча Turnstile отображается при отправке сообщения в чат. Визуально — это виджет с логотипом Cloudflare или невидимая проверка.
Поиск websiteKey
- Откройте DevTools (F12) на целевой странице
- Перейдите во вкладку "Elements"
- Найдите элемент с классом
cf-turnstileили атрибутомdata-sitekey
Пример тега:
html
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAg146IpY3lPNWte"></div>
Значение атрибута data-sitekey — это ваш websiteKey.
Проверка типа виджета
Убедитесь, что используется стандартный виджет, а не Challenge-страница:
- Стандартный режим: элемент
.cf-turnstileприсутствует, iframe сchallenges.cloudflare.comотсутствует - Challenge-режим: присутствует iframe с эндпоинтом Cloudflare Challenges
Для copilot.microsoft.com в большинстве случаев используется стандартный режим, для которого не требуются дополнительные параметры.
Реализация
Структура задачи TurnstileTask
Задача отправляется методом createTask на эндпоинт https://api.rucaptcha.com/createTask.
Обязательные поля задачи:
| Поле | Тип | Описание |
|---|---|---|
type |
String | TurnstileTask или TurnstileTaskProxyless |
websiteURL |
String | Полный URL страницы с капчей |
websiteKey |
String | Значение из атрибута data-sitekey |
Рекомендуемые поля:
| Поле | Тип | Описание |
|---|---|---|
userAgent |
String | Строка User-Agent браузера. Рекомендуется передавать для синхронизации сессии |
proxyType |
String | Тип прокси: http, https, socks4, socks5 |
proxyAddress |
String | IP-адрес или хост прокси |
proxyPort |
Integer | Порт прокси |
proxyLogin |
String | Логин для аутентификации прокси (если требуется) |
proxyPassword |
String | Пароль для аутентификации прокси (если требуется) |
Пример тела запроса (JSON)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "TurnstileTaskProxyless",
"websiteURL": "https://copilot.microsoft.com/chats/example",
"websiteKey": "0x4AAAAAAAg146IpY3lPNWte",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
}
Получение результата
После создания задачи используйте метод getTaskResult для опроса статуса:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 123456789
}
Возможные значения поля status:
| Значение | Описание |
|---|---|
processing |
Задача в работе, продолжайте опрос |
ready |
Решение готово, токен в поле solution.token |
error |
Произошла ошибка, проверьте errorDescription |
Инъекция токена в страницу
После получения токена:
- Дождитесь появления поля
input[name="cf-turnstile-response"] - Установите значение токена в это поле
- Вызовите события
changeиinputдля активации триггеров сайта - При необходимости обновите
User-Agentв сессии, если API вернул другое значение
Пример логики (псевдокод):
дождаться поля cf-turnstile-response
установить значение токена
вызвать события change и input
если API вернул userAgent:
обновить заголовок User-Agent в сессии
отправить форму или продолжить взаимодействие
Пояснения к параметрам
Минимальный набор параметров
- Для стандартного Turnstile на copilot.microsoft.com достаточно
websiteKeyиwebsiteURL - Параметр
userAgentрекомендуется передавать для синхронизации сессии pagedata,action,dataможно не указывать, если сайт не требует их явно
Синхронизация User-Agent
- API RuCaptcha может вернуть поле
solution.userAgentс актуальной строкой агента - Используйте это значение в последующих запросах к целевому сайту
- Несоответствие User-Agent — частая причина отклонения валидных токенов
Инъекция токена
- Токен передаётся в поле
cf-turnstile-response - После установки значения важно вызвать события
changeиinputдля триггеров сайта - Если сайт использует колбэк-функцию, её нужно вызвать отдельно (редко для стандартного режима)
Обратная связь по результатам решения
После проверки токена на целевом сайте рекомендуется отправить обратную связь.
Если сайт отклонил решение
Отправьте POST-запрос на эндпоинт reportIncorrect:
Эндпоинт: https://api.rucaptcha.com/reportIncorrect
Метод: POST
Content-Type: application/json
Пример запроса:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример ответа:
json
{
"errorId": 0,
"status": "success"
}
Важно: не используйте этот метод, если ваш процент успеха близок к 0%. Это может указывать на ошибку в вашем коде, а не в решениях капчи.
Если сайт принял решение
Отправьте POST-запрос на эндпоинт reportCorrect:
Эндпоинт: https://api.rucaptcha.com/reportCorrect
Метод: POST
Content-Type: application/json
Пример запроса:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример ответа:
json
{
"errorId": 0,
"status": "success"
}
Политика возвратов
- Каждый случай рассматривается индивидуально
- Для стандартных капч проверяется корректность ответа
- Для капч с токеном анализируется статистика исполнителя
- Возврат средств не гарантируется по каждой жалобе
- Итоговая сумма возвратов может отличаться от количества обращений
Отправляйте отчёты честно и только после реальной проверки на целевом сайте.
Типичные ошибки и способы их устранения
| Ошибка | Возможная причина | Решение |
|---|---|---|
| Токен есть, но сайт не пускает | Несоответствие User-Agent | Используйте userAgent из ответа API в последующих запросах |
| Виджет не исчезает после инъекции | Токен не принят или форма не обновилась | Проверьте, что токен инжектирован до отправки формы, добавьте задержку |
Рекомендации по отладке
- Включите детальное логирование запросов и ответов
- Сохраняйте
taskIdдля каждого запроса — это упростит обращение в поддержку - Тестируйте интеграцию в не-headless режиме перед запуском в продакшене
- Проверяйте ответ целевого сайта после отправки токена
- Сравнивайте
User-Agentв запросе к API и в браузере
Дополнительные ресурсы
- Документация по Cloudflare Turnstile API v2
- Метод reportIncorrect — отчёт о неверном решении
- Метод reportCorrect — отчёт о верном решении
- Примеры кода на GitHub
- Обратиться в поддержку
- Гайд по обходу Turnstile
Контрольный список
-
websiteKeyизвлечён из атрибутаdata-sitekey -
websiteURLсодержит полную ссылку на страницу с капчей -
userAgentв запросе совпадает с реальным браузером - В ответе API используется возвращённый
userAgentдля последующих запросов - Токен инжектируется в поле
cf-turnstile-responseс триггерами событий - Прокси (если используется) резидентный и соответствует гео целевого сайта
- Включено логирование для отладки параметров и ответов API
- Реализована отправка отчётов
reportIncorrect/reportCorrect
Заключение
Для стандартной реализации Cloudflare Turnstile на copilot.microsoft.com достаточно передать два обязательных параметра: websiteKey и websiteURL. Дополнительные параметры в данном случае не требуются.
Основная причина, по которой токен может не приниматься сайтом — несоответствие User-Agent между запросом к API и последующими запросами от браузера. Всегда используйте значение userAgent из ответа RuCaptcha для синхронизации сессии.
Корректная инъекция токена требует установки значения в поле cf-turnstile-response и вызова событий change и input для активации триггеров сайта.
Не забывайте отправлять обратную связь через reportIncorrect и reportCorrect — это помогает улучшать качество сервиса и возвращать средства за ошибочные решения.
Автоматизируйте любые капчи с помощью API RuCaptcha.