SolveHub

验证码 API 如何安全轮询异步任务

通过有截止时间的循环处理排队与 uncertain 状态;客户端超时后继续查询原任务,避免重复建单。

适用于授权自动化测试、风控 QA 与浏览器集成。请仅在有权测试的站点和业务流程中使用。

HTTP 成功不等于任务完成

创建请求在任务被接受时返回 HTTP 202。任务仍排队时,成功的 GET 同样返回 HTTP 200。读取 solution 前必须检查 status。

状态 客户端动作
queued / dispatching / processing 等待 2–3 秒后查询同一个任务。
completed 在授权应用中使用结果。
failed / cancelled 停止轮询,检查任务错误与计费结果。
uncertain 保存 taskId,继续核对或联系支持,不盲目重建。

有截止时间的轮询

同时设置单次请求超时和客户端总截止时间。可下载的 Python 与 Node.js 示例每次请求最多 20 秒,总预算 240 秒,轮询间隔 3 秒。这些是客户端示例预算,不是服务时效保证。

save taskId
until client deadline:
    GET the same taskId
    completed -> return solution
    failed or cancelled -> stop
    queued, dispatching, processing or uncertain -> wait
on deadline -> persist taskId and stop local polling

稍后可用保存的 ID 恢复查询。客户端截止不会取消任务,也不能证明任务失败。GET 超时后不要 POST 新任务。

轮询请求失败时

区分 GET 请求故障与任务状态。429 和可重试 5xx 要遵守 Retry-After,并设置重试上限。如果等待时间超过预算,停止本地查询并保存 ID。认证或权限错误需要修正,不能通过密集轮询解决。

避免重叠轮询

通常每个任务只需一个轮询器。在业务记录中保存 taskId,协调工作进程,在流程结束时清理定时器。Webhook 可减少轮询;配置与投递行为见 API 参考。

为什么任务仍是 uncertain?

处理结果可能仍待核对,资金也可能仍预占。查询原任务,向支持提供 taskId 和请求编号,不要发送 API Key。参见计费与预占。

相关文档

从 cURL 开始接入 注册账户

最近更新: