Запрос токена reCAPTCHA Enterprise с cURL

Автор: solvethree3 мин на чтение

Создайте задачу с именем хоста сайта, действием и прокси. Если возвращается pending или solving, опрашивайте задачу по полученному ID. Читайте токен из solution.token только при статусе ready.

На этой странице

Подготовьте сайт, ключ и прокси

  • Убедитесь, что cURL и jq доступны в вашей оболочке.
  • Задайте для SOLVETHREE_API_KEY API-ключ рабочего пространства. Выполняйте эти команды на сервере; не размещайте ключ в браузерном коде.
  • Задайте для SOLVETHREE_PROXY URL прокси, который планируете использовать для решения и отправки токена.
  • Настройте в консоли активный профиль сайта reCAPTCHA для вашего рабочего пространства. Замените accounts.example.com и login в примере на свои имя хоста и действие.

Передача имени хоста и действия не создаёт профиль сайта. Профиль должен быть активен до отправки запроса на решение.

Создайте задачу с явно заданным ожиданием

cURL + jq · создание одной задачи
# Set SOLVETHREE_API_KEY and SOLVETHREE_PROXY in your environment first.
# Replace the hostname and action with your active site profile.
jq -n \
  --arg proxy "$SOLVETHREE_PROXY" \
  --arg requestId "login-$(date +%s)-$$" \
  '{site:"accounts.example.com", action:"login", proxy:$proxy, requestId:$requestId}' \
| curl --fail-with-body --max-time 30 \
  'https://api.solvethree.com/v1/tasks?waitMs=15000' \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary @-

Тело JSON содержит site, action и один proxy. Требуется ровно одно из полей proxy или proxyCandidates. Не добавляйте type или url; без recaptchaType выбирается enterprise-v3.

Параметр запроса waitMs=15000 задаёт ожидание до 15 секунд для запроса создания. Его нужно указывать в URL, а не в теле JSON. Тайм-аут cURL составляет 30 секунд, оставляя запас на сетевые задержки сверх этого ожидания на сервере. На момент получения ответа задача всё ещё может быть в промежуточном состоянии.

Прочитайте ответ и опрашивайте незавершённые задачи

Проверьте наличие HTTP-ошибки, прежде чем интерпретировать тело как ответ задачи. Обе команды используют --fail-with-body; обрабатывайте неудачный HTTP-запрос отдельно от задачи со статусом failed.

Ответ с готовым решением имеет следующую структуру. Значения ниже — заглушки, а не токен, который можно отправить.

Пример ответа с готовым решением · условные учётные данные
{
  "id": "example-task",
  "status": "ready",
  "solution": {
    "token": "EXAMPLE_TOKEN",
    "userAgent": "EXAMPLE_USER_AGENT",
    "secChUa": "EXAMPLE_CLIENT_HINTS"
  }
}
Что делать с полученным статусом задачи
Что делать с полученным статусом задачи
СтатусСледующее действие
pending или solvingСохраните полученный id и запрашивайте ту же задачу. Пригодного для использования решения ещё нет; не создавайте задачу на замену.
готовоПрекратите опрос и прочитайте solution.token, solution.userAgent и solution.secChUa.
failedПрекратите опрос и изучите errorCode и error. Средства за неудачные решения возвращаются. Устраните причину, прежде чем запускать новую задачу.

Если ответ содержит промежуточное состояние, задайте в окружении TASK_ID равным полученному id, затем запросите задачу:

API задач · получение существующей задачи
curl --fail-with-body --max-time 30 \
  "https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY"

Этот GET ожидает результат до 15 секунд при HTTP-тайм-ауте 30 секунд. Без waitMs GET возвращает ответ без ожидания. Повторяйте GET только при статусе pending или solving и задайте общий срок ожидания в вызывающем коде, чтобы цикл опроса не мог выполняться бесконечно.

Если задача завершилась неудачно, используйте сведения об ошибке, а не предполагайте проблему с балансом. Например, site-unreachable требует проверки доступности целевого сайта, а не слепой повторной отправки неизменённых входных данных.

Отправьте токен

Используйте solution.token в запросе к целевому приложению. Поле id задачи нужно только для получения задачи; это не токен CAPTCHA. Куда передавать токен, зависит от формы или API целевого приложения, поэтому универсальной команды для его отправки нет.

При отправке токена используйте возвращённые solution.userAgent и solution.secChUa, а также прокси, через который задача была успешно решена. В примере выше с одним прокси используйте тот же SOLVETHREE_PROXY. Не подставляйте посторонние идентификационные данные браузера или URL целевого ресурса.

Статус ready означает, что solvethree сгенерировал решение. Чтобы определить, приняло ли целевое приложение ваш запрос, отдельно проверьте его ответ.

Другие вопросы

Это то же самое, что API siteverify от Google?

Нет. API siteverify от Google проверяет уже существующий токен и требует секретный ключ проверки владельца сайта. API solvethree генерирует решение с помощью API-ключа вашего рабочего пространства. Не передавайте секретный ключ проверки Google в запросе на создание задачи.

Запустите первую задачу.

Начните с $5 на балансе рабочего пространства.

Создать рабочее пространство
Запрос токена reCAPTCHA Enterprise с cURL · solvethree