使用 HTTPie 测试 CAPTCHA API
使用 HTTPie 创建一个任务,保存其 ID,然后获取同一个任务。在 POST 之前记录 requestId,这样连接超时就不会迫使你另建一个逻辑任务。
本页内容
准备请求
- 安装 HTTPie 和 jq,并在 Bash 中运行此示例。这些命令使用 HTTPie 的
http可执行程序,而不是 curl 或指向 curl 的 shell 别名。 - 将环境变量
SOLVETHREE_API_KEY设置为你的工作区 API 密钥。请在可信机器上运行;不要将密钥放入浏览器代码中。 - 在控制台为目标主机名配置有效的配置文件。发送主机名和操作不会创建配置文件。参见站点配置文件设置。
- 替换示例主机名、操作和代理 URL。使用不含路径、查询参数或片段的 HTTP 或 HTTPS 代理 URL。
- 将 requestId 占位符替换为此逻辑任务的唯一 ID:由 1–64 个 ASCII 字母、数字、下划线或连字符组成。发送请求前请保存该 ID。
此请求用于 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 从标准输入读取该文件。Authorization 请求头通过 Bearer 身份验证发送你的密钥。请将 request.json 保密,因为其中包含代理凭据。
waitMs==0 和 waitMs==15000 是 HTTPie 查询参数,而不是 JSON 请求体字段。POST 请求不等待;GET 使用 15,000 毫秒的等待时间。HTTPie 单独的 --timeout=30 设置 30 秒的客户端超时。
POST 响应保存到 task.json,jq 从中提取 id 供 GET 使用。请按顺序运行命令。如果 HTTPie 报告失败,set -eu 会停止脚本,防止使用不完整的响应进行获取。
HTTP 成功不代表任务已就绪
--check-status 会检测不成功的 HTTP 响应。在将响应体视为成功的任务响应之前,请先处理这些情况。成功的 HTTP 请求仍可能返回未完成或失败的任务;接下来请读取 JSON 中的 status。
| 状态 | 下一步操作 |
|---|---|
| pending 或 solving | 在你设定的有限截止时间内,使用相同的任务 ID 再次获取任务。不要仅因为该任务尚未就绪就另建任务。 |
| ready | 使用返回的解决结果。这是唯一包含可用解决结果的状态。 |
| failed | 停止轮询并检查 errorCode 和 error。求解失败会退款;不要盲目原样重试无效输入。 |
此示例只获取一次,不执行轮询循环。向预期目标提交已就绪的解决结果时,请使用返回的 userAgent 和 secChUa,以及成功求解时使用的代理。就绪表示 solvethree 已生成解决结果,并不代表你的应用请求成功。
恢复超时的 POST
客户端超时并不能证明任务创建失败。如果已有任务 ID,请获取该任务。如果 POST 在你收到 ID 前超时,请使用未更改的 request.json(包括其中原始的 requestId)重新发送 POST。相同的 ID 和任务输入会返回现有任务。
不要从空白或不完整的 task.json 中提取 ID;请先恢复 POST。复用该 requestId 时,不要更改代理、操作或其他任务输入,否则会发生冲突。只有在打算创建新的逻辑任务时,才使用新的 requestId。
运行您的第一个任务。
使用 $5 工作区额度开始体验。