Эта статья была полезной?
Как решить reCAPTCHA Enterprise V2 на сайте app.oneassembly.com
Технический специалист
Введение
Это руководство предназначено для разработчиков, которые автоматизируют авторизацию на сайте https://app.oneassembly.com, защищённом связкой Auth0 и reCAPTCHA Enterprise V2.
Если вы сталкиваетесь с ошибкой ERROR_CAPTCHA_UNSOLVABLE, не понимаете, как передать сессионные параметры, или получаете токены, которые не принимаются целевым сайтом — эта статья для вас.
Предварительные требования: понимание работы HTTP-запросов, структуры REST API и базовые навыки работы с командной строкой или инструментами типа curl/Postman.
Общие сведения
О технологии reCAPTCHA Enterprise V2
reCAPTCHA Enterprise — это расширенная версия Google reCAPTCHA для бизнес-критичных сценариев. Ключевые отличия от стандартной v2:
- Требует передачи параметра
enterprise=1или использования специального типа задачи - Поддерживает дополнительные параметры:
action,data-s,apiDomain,enterprisePayload - Чаще применяется на страницах с повышенной защитой, включая авторизацию через Auth0
Особенности Auth0-сессий
Страницы входа на базе Auth0 генерируют уникальные URL с параметром state, например:
https://login.oneassembly.com/u/login?state=hKFo2SB1MTFkY2IyWnN6cEtwMVZ5WkloWlFCTXJvNlc0VXp1VKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEdWTDZIeElIU0RGZHV6SG9NMWpVdk1wMmM3Q1R0bjNSo2NpZNkgSnNOTlAwM3pxTDZVQUJjZHlncXFhczZySlpTdmduNzY
Этот параметр привязывает сессию к конкретному браузеру и IP. Если передать решателю базовый URL (https://app.oneassembly.com), он не увидит форму капчи и вернёт ERROR_CAPTCHA_UNSOLVABLE.
Ключевой вывод: всегда передавайте в websiteURL полный динамический URL со всеми параметрами сессии.
Подготовка окружения
Что потребуется для работы
- API-ключ из личного кабинета RuCaptcha
- Инструмент для отправки HTTP-запросов: curl, Postman, httpie или любой язык программирования
- Доступ к целевой странице: возможность открыть
https://app.oneassembly.comи проследить редирект наlogin.oneassembly.com
Получение API-ключа
- Зарегистрируйтесь на rucaptcha.com
- Перейдите в раздел настроек аккаунта
- Скопируйте ваш API-ключ
- Для безопасности храните ключ в переменной окружения или менеджере секретов
bash
# Пример сохранения ключа (Linux/macOS)
export APIKEY_rucaptcha.com=ваш_ключ_здесь
Анализ страницы
Шаг 1. Откройте страницу авторизации
Перейдите по стартовому URL: https://app.oneassembly.com. Вас автоматически перенаправит на login.oneassembly.com с параметром state.
Шаг 2. Откройте инструменты разработчика
Нажмите F12, перейдите на вкладку Network. Обновите страницу и найдите запрос к anchor (загрузка виджета reCAPTCHA).
Шаг 3. Извлеките параметры
В запросе anchor найдите следующие параметры:
| Параметр | Где найти | Пример значения |
|---|---|---|
websiteKey (sitekey) |
Query string запроса anchor | 6LeSRLUpAAAAAFjsCw4WqcgzM6imNrz2rSS4l_I1 |
websiteURL |
Адресная строка после редиректа | Полный URL со state-параметром |
apiDomain |
Query string (опционально) | www.recaptcha.net |
Важно: параметр data-s для данного случая не требуется, но если он присутствует в enterprisePayload, его также нужно передать.
Реализация
Создание задачи: RecaptchaV2EnterpriseTaskProxyless
Этот тип задачи подходит для большинства случаев. RuCaptcha использует собственный пул прокси для решения капчи.
Эндпоинт: https://api.rucaptcha.com/createTask
Метод: POST
Content-Type: application/json
Пример запроса для oneassembly.com:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV2EnterpriseTaskProxyless",
"websiteURL": "https://login.oneassembly.com/u/login?state=hKFo2SAyc2M1dldxTjhMS19TYV9kb2MxM0hCdjJ6MWdWbXZ5dqFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHdFREliaWgyRXNzSkFsUjVvcHFyVllnYU5sVHp4bHhUo2NpZNkgSnNOTlAwM3pxTDZVQUJjZHlncXFhczZySlpTdmduNzY",
"websiteKey": "6LeSRLUpAAAAAFjsCw4WqcgzM6imNrz2rSS4l_I1",
"isInvisible": false,
"enterprisePayload": {}
}
}
Создание задачи с прокси: RecaptchaV2EnterpriseTask
Используйте этот тип, если требуется совпадение IP между вашим запросом и запросом к Google (например, для сервисов вроде Google Search).
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "RecaptchaV2EnterpriseTask",
"websiteURL": "https://login.oneassembly.com/u/login?state=hKFo2SAyc2M1dldxTjhMS19TYV9kb2MxM0hCdjJ6MWdWbXZ5dqFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIHdFREliaWgyRXNzSkFsUjVvcHFyVllnYU5sVHp4bHhUo2NpZNkgSnNOTlAwM3pxTDZVQUJjZHlncXFhczZySlpTdmduNzY",
"websiteKey": "6LeSRLUpAAAAAFjsCw4WqcgzM6imNrz2rSS4l_I1",
"isInvisible": false,
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"cookies": "session_id=abc123; auth_token=xyz789",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": 8080,
"proxyLogin": "user23",
"proxyPassword": "p4$w0rd"
}
}
Получение результата
После создания задачи используйте taskId из ответа для опроса результата.
Эндпоинт: https://api.rucaptcha.com/getTaskResult
Метод: POST
Пример запроса:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример успешного ответа:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"gRecaptchaResponse": "03ADUVZw...UWxTAe6ncIa",
"token": "03ADUVZw...UWxTAe6ncIa"
},
"cost": "0.00299",
"ip": "1.2.3.4",
"createTime": 1692863536,
"endTime": 1692863556
}
Использование токена
Полученный токен передайте на целевой сайт в поле формы g-recaptcha-response или используйте в запросе через колбэк-функцию, в зависимости от реализации фронтенда.
Пояснения к параметрам
Параметры задачи RecaptchaV2EnterpriseTaskProxyless
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
type |
String | Да | RecaptchaV2EnterpriseTaskProxyless или RecaptchaV2EnterpriseTask |
websiteURL |
String | Да | Полный URL страницы с капчей, включая все параметры сессии |
websiteKey |
String | Да | reCAPTCHA sitekey, извлекается из атрибута data-sitekey или параметра k в запросах к API |
enterprisePayload |
Object | Нет | Дополнительные параметры для grecaptcha.enterprise.render, например {"s": "value"} |
isInvisible |
Boolean | Нет | true для невидимой версии капчи (без чекбокса) |
userAgent |
String | Нет | User-Agent браузера, с которым будет загружена капча |
cookies |
String | Нет | Куки в формате key1=val1; key2=val2, передаются в браузер воркера |
apiDomain |
String | Нет | Домен для загрузки капчи: google.com или recaptcha.net |
Параметры прокси (только для RecaptchaV2EnterpriseTask)
| Параметр | Тип | Обязателен | Описание |
|---|---|---|---|
proxyType |
String | Да | Тип прокси: http, socks4, socks5 |
proxyAddress |
String | Да | IP-адрес или хостнейм прокси |
proxyPort |
Integer | Да | Порт прокси |
proxyLogin |
String | Нет | Логин для базовой аутентификации |
proxyPassword |
String | Нет | Пароль для базовой аутентификации |
Песочница для тестирования
Перед интеграцией в продакшен протестируйте запросы в песочнице RuCaptcha. Это позволит проверить формат запросов без расхода баланса.
Типичные ошибки
| Ошибка | Вероятная причина | Решение |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
Передан базовый URL вместо полного со state | Используйте полный URL из адресной строки после редиректа Auth0 |
ERROR_WRONG_USER_KEY |
Неверный API-ключ | Проверьте ключ в настройках аккаунта на rucaptcha.com |
ERROR_ZERO_BALANCE |
Недостаточно средств на балансе | Пополните баланс или проверьте лимиты |
ERROR_IP_NOT_ALLOWED |
Запрос с неавторизованного IP | Добавьте IP в белый список в настройках API-ключа |
| Токен не принимается сайтом | Несовпадение User-Agent, неверный способ передачи токена или отсутствие прокси | Используйте тот же User-Agent, что и в браузере, добавьте резидентный прокси нужной локации, решите капчу вручную и проверьте, как именно токен отправляется |
Обратная связь по результатам решения
После получения токена и проверки его на целевом сайте рекомендуется отправить обратную связь. Это помогает улучшать качество распознавания и в некоторых случаях возвращать средства за ошибочные решения.
Если сайт отклонил решение (неправильный токен)
Отправьте 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"
}
Политика возвратов
- Каждый случай рассматривается индивидуально
- Для стандартных капч проверяется корректность ответа
- Для капч с токеном анализируется статистика исполнителя
- Возврат средств не гарантируется по каждой жалобе
- Итоговая сумма возвратов может отличаться от количества обращений
Отправляйте отчёты честно и только после реальной проверки на целевом сайте.
Дополнительные ресурсы
- Песочница: активировать песочницу — интерфейс для тестирования запросов к API без написания кода
- Документация API: reCAPTCHA V2 Enterprise — полная спецификация эндпоинтов и параметров
- Примеры кода на GitHub: 2captcha-python репозиторий — SDK и примеры интеграции
- Поддержка: создать тикет — обратитесь в службу поддержки при возникновении технических вопросов
Контрольный список перед запуском
- Получен и проверен API-ключ из личного кабинета rucaptcha.com
- Извлечён актуальный
websiteKeyсо страницыlogin.oneassembly.com - В параметр
websiteURLпередан полный динамический URL со state-параметром - User-Agent в запросах совпадает с браузерным
- Реализована обработка ошибок и логирование
- Настроена отчётность через
reportIncorrect/reportCorrect
Заключение
Решение reCAPTCHA Enterprise V2 на Auth0-страницах требует внимания к деталям: динамические сессионные параметры, корректные флаги API и согласованность окружения. Ключевое условие успеха — передача полного URL со state-параметром в поле websiteURL.
Используйте тип задачи RecaptchaV2EnterpriseTaskProxyless для большинства сценариев или RecaptchaV2EnterpriseTask, если требуется совпадение IP. Не забывайте отправлять обратную связь через reportIncorrect и reportCorrect — это помогает улучшать качество сервиса и возвращать средства за ошибочные решения.
Следуя этой инструкции, вы сможете стабильно получать рабочие токены и интегрировать решение капч в свои проекты на RuCaptcha.