Ошибки API solvethree: что исправить и когда повторять запрос

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

Начните с HTTP-статуса. 401 означает, что API отклонил ваши учётные данные; полученная задача со статусом failed означает, что запрос выполнен успешно, но решить задачу не удалось. Способы устранения различаются.

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

Устраните HTTP-ошибку до чтения результата задачи

Обрабатывайте неуспешные HTTP-ответы до чтения данных успешного ответа. Для POST /v1/tasks статус 201 означает, что создана новая задача; 200 — что идемпотентный повтор запроса вернул существующую задачу. Ни один из этих ответов не означает, что решение завершено.

400 — некорректное тело запроса

Сравните отправленное тело запроса с документированными полями и требованиями для вашего типа задачи.

Попробуйте: Исправьте входные данные перед повторной отправкой. Повторная отправка неизменённого некорректного тела запроса не устранит проблему. Проверьте запрос по контракту создания задачи.

401 — недействительный API-ключ

Убедитесь, что запрос содержит Authorization: Bearer, за которым следует действительный API-ключ рабочего пространства.

Попробуйте: Добавьте отсутствующий ключ или исправьте отклонённый. Храните его на сервере, не раскрывая в браузерном коде.

402 — недостаточно средств

Проверьте баланс рабочего пространства, связанного с API-ключом.

Попробуйте: Пополните баланс этого рабочего пространства перед повторной попыткой. Не считайте несвязанные HTTP-ошибки или сбои задач проблемами с балансом.

403 — неактивный профиль сайта

Для reCAPTCHA убедитесь, что у целевого сайта есть активный профиль, доступный вашему рабочему пространству.

Попробуйте: Настройте целевой сайт в консоли и убедитесь, что профиль активен. Указание имени хоста и действия в задаче не создаёт профиль. Этот ответ шлюза не свидетельствует о том, что целевой сайт вас заблокировал.

409 — конфликт идентификатора запроса

Проверьте, не использовался ли тот же requestId ранее с другими входными данными задачи.

Попробуйте: Используйте исходные входные данные, чтобы восстановить доступ к исходной задаче. Если вы хотите создать другую задачу, назначьте ей новый идентификатор запроса.

410 — истёк срок хранения результата

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

Попробуйте: Прекратите запрашивать этот результат. Создайте новую задачу решения, если она ещё нужна. Этот статус относится к хранению результата в API, а не к сроку действия токена или cookie целевого сайта.

429 — превышен лимит частоты запросов

Прочитайте фактическое значение Retry-After в ответе.

Попробуйте: Перед повторной попыткой выждите указанное время и снизьте частоту запросов. Пока действует ограничение, не продолжайте опрос или отправку запросов с прежней частотой.

502 — сервис генерации недоступен

Отличайте недоступность сервиса от некорректных входных данных или недостатка средств.

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

HTTP 503 означает, что мощности для генерации недоступны. Повторите попытку позже; для того же запроса создания используйте его идентификатор запроса и неизменённые входные данные задачи.

Задача с ошибкой завершена: прекратите опрос

  • pending или solving: продолжайте опрос существующей задачи; не создавайте замену только потому, что она ещё не готова.
  • ready: прекратите опрос и прочитайте решение.
  • failed: прекратите опрос и проверьте errorCode и error.
Пример ответа · окончательный сбой
{
  "id": "example_login_001",
  "status": "failed",
  "errorCode": "site-unreachable",
  "error": "target page did not respond"
}

Здесь site-unreachable — код ошибки задачи, а не HTTP-статус. Прежде чем запрашивать новое решение, проверьте переданный URL целевого сайта и убедитесь, что страница отвечает. Дальнейший опрос не перезапустит эту задачу с ошибкой, а повторная отправка с её исходным идентификатором запроса вернёт существующую задачу вместо создания новой.

После тайм-аута создания сначала восстановите задачу, а не создавайте новую

Тайм-аут соединения не доказывает, что задача не была создана. Задайте необязательный requestId до первой попытки создания, чтобы безопасно восстановить ту же логическую задачу. Он должен содержать 1–64 символа ASCII: буквы, цифры, подчёркивания или дефисы.

  1. 1.

    Если у вас есть ID задачи, получите её

    Используйте GET /v1/tasks/:id и обработайте HTTP-ответ до проверки статуса задачи.

  2. 2.

    Если ответ на создание потерян, повторите исходный запрос

    Отправьте те же входные данные задачи с тем же идентификатором запроса. Идемпотентный повтор вернёт существующую задачу, если она была создана. Не меняйте входные данные для этого ID.

  3. 3.

    Создавайте замену, только если намерены запустить ещё одно решение

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

См. восстановление по идентификатору запроса, чтобы узнать об обработке повторных запросов, или опрос и тайм-ауты, если создание прошло успешно, но задача ещё выполняется.

Проблема не решена?

Отправьте в поддержку ID задачи и полученную ошибку.

Связаться с поддержкой
Ошибки API solvethree: что исправить и когда повторять запрос · solvethree