Восстановите запрос после тайм-аута без оплаты ещё одной задачи

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

Тайм-аут соединения не означает, что задача не была создана. solvethree мог создать задачу до потери ответа. Восстановите доступ к ней, отправив те же входные данные с тем же requestId, вместо того чтобы создавать новую логическую задачу.

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

Сохраните запрос и повторите его без изменений

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

  1. 1.

    Сохраните тело запроса задачи

    Поместите полный запрос, включая requestId, в request.json. Для reCAPTCHA Enterprise укажите site как имя хоста, action и ровно одно из полей: proxy или proxyCandidates. Не добавляйте type или url. Храните файл в закрытом доступе, поскольку он содержит учётные данные прокси.

  2. 2.

    Отправьте сохранённый файл

    Выполните приведённую ниже команду с API-ключом вашего рабочего пространства. Храните ключ на сервере.

  3. 3.

    При тайм-ауте соединения повторите команду

    Используйте ту же команду и неизменённый request.json. Не создавайте другой requestId и не меняйте входные данные задачи только потому, что ответ не пришёл.

cURL · повторная отправка того же файла запроса
# request.json contains one valid task body and a saved requestId.
# Keep the file private: it contains your proxy credentials.
curl --fail-with-body --max-time 30 \
  'https://api.solvethree.com/v1/tasks?waitMs=0' \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY" \
  -H 'Content-Type: application/json' --data-binary @request.json

# If the connection broke, run the identical command with the identical file.
# New task: HTTP 201. Same requestId + same inputs: HTTP 200, existing task.
# Same requestId + changed inputs: HTTP 409.

HTTP 201 означает, что создана новая задача. HTTP 200 означает, что идентичный запрос вернул существующую задачу. В обоих случаях прочитайте возвращённые ID и статус задачи; ни один из этих HTTP-статусов сам по себе не означает, что решение готово.

Рассмотрим конкретный пример изменения входных данных: допустим, в сохранённом запросе для action задано значение login. Если изменить его на checkout, сохранив тот же requestId, сервер вернёт HTTP 409 — конфликт идентификатора запроса. Чтобы восстановить доступ к исходной задаче, восстановите исходный файл и повторите запрос. Если вам действительно нужны изменённые входные данные, назначьте этой новой логической задаче новый requestId.

Обрабатывайте неуспешные HTTP-ответы до чтения данных об успешном выполнении задачи. 409 — это ошибка HTTP-запроса, а не окончательный сбой исходной задачи.

Получите идентификаторы из ошибки SDK

Оба официальных SDK генерируют requestId, если вы его не указали, но ни один не повторяет создание задачи автоматически. Если вызов SDK выбрасывает исключение, проверьте поля для восстановления, прежде чем запускать другую задачу.

  • JavaScript: SolvethreeError предоставляет поля requestId и taskId.
  • Python: SolvethreeError предоставляет поля request_id и task_id.

Если ошибка содержит ID задачи, возобновите опрос этой задачи через GET; повторять создание не нужно. Если она содержит только ID запроса, повторите создание с этим ID и исходными входными данными, затем используйте возвращённый ID задачи. Сохранять исходные входные данные важно, даже если ID сгенерировал SDK.

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

Продолжите работу с восстановленной задачей

Получите восстановленную задачу через GET /v1/tasks/:id. Продолжайте опрос, пока её статус — pending или solving. Только статус ready содержит решение, пригодное для использования.

Если статус — failed, прекратите опрос и проверьте errorCode и error. За неудачные решения средства возвращаются. Это отличается от отклонения сайтом сгенерированного решения: ready означает, что решение доступно, а не что целевой сайт его принял.

После истечения срока хранения завершённые результаты могут возвращать HTTP 410, поэтому восстановление не заменяет постоянное хранение результатов. О самом цикле опроса читайте в разделе опрос задач и тайм-ауты.

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

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

Связаться с поддержкой
Восстановите запрос после тайм-аута без оплаты ещё одной задачи · solvethree