恢复超时请求,无需为另一个任务付费

作者:solvethree阅读需 1 分钟

连接超时并不意味着任务创建失败。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,表示请求 ID 冲突。要恢复原始任务,请还原原始文件并重放请求。如果确实需要使用更改后的输入,请为这个新的逻辑任务分配新的 requestId。

读取任务成功响应体之前,请先处理非成功的 HTTP 响应。409 是 HTTP 请求错误,并不表示原始任务已进入失败终态。

从 SDK 错误中获取恢复所需的 ID

两个官方 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