Тестирование CAPTCHA API с помощью HTTPie
Создайте одну задачу с помощью HTTPie, сохраните её ID, затем получите эту же задачу. Запишите requestId до POST-запроса, чтобы тайм-аут подключения не вынудил вас создать новую логическую задачу.
На этой странице
Подготовьте запрос
- Установите HTTPie и jq и запустите пример в Bash. Эти команды используют исполняемый файл
httpиз HTTPie, а не curl или псевдоним curl в оболочке. - Задайте в переменной окружения
SOLVETHREE_API_KEYключ API вашего рабочего пространства. Выполняйте это на доверенном компьютере; не включайте ключ в браузерный код. - Настройте в консоли активный профиль для имени хоста целевого сайта. Отправка имени хоста и действия не создаёт профиль. См. Настройка профиля сайта.
- Замените примеры имени хоста, действия и URL прокси. Используйте URL HTTP- или HTTPS-прокси без пути, строки запроса и фрагмента.
- Замените заполнитель requestId уникальным ID для этой логической задачи: 1–64 символа из букв ASCII, цифр, символов подчёркивания или дефисов. Сохраните его перед отправкой запроса.
Запрос предназначен для reCAPTCHA Enterprise: значение recaptchaType по умолчанию — enterprise-v3. Нужны site, action и ровно одно из полей proxy или proxyCandidates; в этом примере используется один прокси. Не добавляйте поля type и url.
Создайте задачу и сохраните её ID
set -eu
umask 077
# Install HTTPie and jq. Keep the same request.json for recovery.
cat > request.json <<'JSON'
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://USER:PASSWORD@PROXY:PORT",
"requestId": "replace-with-one-unique-logical-task-id"
}
JSON
# This file contains proxy credentials; keep it private.
http --check-status --timeout=30 POST https://api.solvethree.com/v1/tasks \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==0 < request.json > task.json
TASK_ID=$(jq -r '.id' task.json)
http --check-status --timeout=30 GET "https://api.solvethree.com/v1/tasks/$TASK_ID" \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==15000
# pending/solving: retrieve the same ID again, within a finite deadline.
# ready: use solution. failed: stop and inspect errorCode/error.
# A timed-out POST is recovered with the unchanged file and requestId.JSON-строки в кавычках записываются в request.json, который HTTPie читает из stdin. Заголовок Authorization передаёт ваш ключ с использованием аутентификации Bearer. Храните request.json в закрытом доступе, поскольку он содержит учётные данные прокси.
waitMs==0 и waitMs==15000 — параметры строки запроса HTTPie, а не поля тела JSON. POST не запрашивает ожидание; GET использует ожидание 15,000 мс. Отдельный параметр HTTPie --timeout=30 задаёт клиентский тайм-аут в 30 секунд.
Ответ на POST сохраняется в task.json, а jq извлекает из него id для GET. Выполняйте команды по порядку. set -eu останавливает скрипт, если HTTPie сообщает об ошибке, прежде чем неполный ответ будет использован для получения задачи.
Успешный HTTP-ответ не означает готовность задачи
--check-status выявляет неуспешные HTTP-ответы. Обработайте их, прежде чем считать тело успешным ответом с задачей. Успешный HTTP-запрос всё равно может вернуть незавершённую задачу или задачу с ошибкой; следующим шагом проверьте status в JSON.
| Статус | Следующее действие |
|---|---|
| pending или solving | Снова запросите задачу с тем же ID в пределах выбранного вами конечного срока. Не создавайте новую задачу только потому, что эта ещё не готова. |
| готово | Используйте полученное решение. Только при этом статусе доступно пригодное к использованию решение. |
| failed | Прекратите опрос и проверьте errorCode и error. Средства за неудачные попытки решения возвращаются; не повторяйте вслепую запросы с неизменёнными некорректными входными данными. |
Пример выполняет одно получение задачи, а не цикл опроса. При отправке готового решения на предназначенный для него целевой сайт используйте полученные userAgent и secChUa вместе с прокси, через который удалось получить решение. Готовность означает, что solvethree сгенерировал решение, а не то, что ваш прикладной запрос выполнен успешно.
Восстановите POST-запрос после тайм-аута
Клиентский тайм-аут не доказывает, что задача не была создана. Если у вас уже есть ID задачи, получите её. Если POST-запрос завершился по тайм-ауту до получения ID, повторите POST с неизменённым request.json, включая исходный requestId. Те же ID и входные данные задачи возвращают существующую задачу.
Не извлекайте ID из пустого или неполного task.json; сначала восстановите POST-запрос. Не меняйте прокси, действие или другие входные данные задачи при повторном использовании этого requestId — отличающиеся входные данные вызывают конфликт. Используйте новый requestId только тогда, когда намерены создать новую логическую задачу.
Источники и справочник API
Запустите первую задачу.
Начните с $5 на балансе рабочего пространства.