使用 cURL 请求 reCAPTCHA Enterprise 令牌
使用站点主机名、操作和代理创建任务。如果返回 pending 或 solving,则轮询返回的任务 ID。仅在状态为 ready 时读取 solution.token 中的令牌。
本页内容
准备站点、密钥和代理
- 确保 shell 中可使用 cURL 和 jq。
- 将
SOLVETHREE_API_KEY设置为你的工作区 API 密钥。在服务器端运行这些命令;不要将密钥放入浏览器代码。 - 将
SOLVETHREE_PROXY设置为你打算用于求解和提交令牌的代理 URL。 - 在控制台中为你的工作区设置已启用的 reCAPTCHA 站点配置文件。将示例中的
accounts.example.com和login替换为你的主机名和操作。
发送主机名和操作不会创建站点配置文件。请求求解之前,配置文件必须已启用。
创建任务并显式设置等待时间
# Set SOLVETHREE_API_KEY and SOLVETHREE_PROXY in your environment first.
# Replace the hostname and action with your active site profile.
jq -n \
--arg proxy "$SOLVETHREE_PROXY" \
--arg requestId "login-$(date +%s)-$$" \
'{site:"accounts.example.com", action:"login", proxy:$proxy, requestId:$requestId}' \
| curl --fail-with-body --max-time 30 \
'https://api.solvethree.com/v1/tasks?waitMs=15000' \
-H "Authorization: Bearer $SOLVETHREE_API_KEY" \
-H 'Content-Type: application/json' \
--data-binary @-JSON 请求体提供 site、action 和单个 proxy。必须提供 proxy 或 proxyCandidates,且只能二选一。不要添加 type 或 url;省略 recaptchaType 会选择 enterprise-v3。
waitMs=15000 查询参数要求创建请求最多等待 15 秒。它应放在 URL 中,而不是 JSON 请求体中。cURL 超时为 30 秒,在服务端等待时间之外为网络开销留出余量。响应到达时,任务仍可能未进入终态。
读取响应并轮询未完成的任务
在将响应体解释为任务响应之前,先检查是否存在 HTTP 错误。两个命令都使用 --fail-with-body;请将 HTTP 请求失败与状态为 failed 的任务分开处理。
就绪响应的结构如下。下方的值是占位值,不是可提交的令牌。
{
"id": "example-task",
"status": "ready",
"solution": {
"token": "EXAMPLE_TOKEN",
"userAgent": "EXAMPLE_USER_AGENT",
"secChUa": "EXAMPLE_CLIENT_HINTS"
}
}| 状态 | 下一步操作 |
|---|---|
| pending 或 solving | 保留返回的 id 并检索同一个任务。目前还没有可用的解决方案;不要创建替代任务。 |
| ready | 停止轮询并读取 solution.token、solution.userAgent 和 solution.secChUa。 |
| failed | 停止轮询并检查 errorCode 和 error。求解失败会退款。解决原因后再启动新任务。 |
对于非终态响应,请将环境中的 TASK_ID 设置为返回的 id,然后检索该任务:
curl --fail-with-body --max-time 30 \
"https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
-H "Authorization: Bearer $SOLVETHREE_API_KEY"此 GET 最多等待 15 秒以获取结果,HTTP 超时为 30 秒。如果不提供 waitMs,GET 会立即返回,不作等待。仅在状态为 pending 或 solving 时重复 GET,并在调用方设置总体截止时间,避免轮询循环无限运行。
如果任务失败,请根据错误详情处理,而不要假定是余额问题。例如,site-unreachable 表示应检查目标站点是否可访问,而不是盲目地重新提交未作更改的输入。
提交令牌
在目标应用的请求中使用 solution.token。任务 id 仅用于获取任务,并不是 CAPTCHA 令牌。令牌应放在哪里取决于目标的表单或 API,因此没有通用的目标提交命令。
提交令牌时,使用返回的 solution.userAgent 和 solution.secChUa,以及求解成功时使用的代理。对于上面的单代理示例,请使用同一个 SOLVETHREE_PROXY。不要混用无关的浏览器身份或目标 URL。
ready 表示 solvethree 已生成解决方案。请另外检查目标应用的响应,确认它是否接受了你的请求。
其他问题
这与 Google 的 siteverify API 相同吗?
不同。Google 的 siteverify 用于检查已有的令牌,需要网站所有者的验证密钥。solvethree API 则使用你的工作区 API 密钥生成解决方案。不要在任务请求中放入 Google 验证密钥。
运行您的第一个任务。
使用 $5 工作区额度开始体验。