使用 cURL 请求 reCAPTCHA Enterprise 令牌

作者:solvethree阅读需 1 分钟

使用站点主机名、操作和代理创建任务。如果返回 pending 或 solving,则轮询返回的任务 ID。仅在状态为 ready 时读取 solution.token 中的令牌。

本页内容

准备站点、密钥和代理

  • 确保 shell 中可使用 cURL 和 jq。
  • 将 SOLVETHREE_API_KEY 设置为你的工作区 API 密钥。在服务器端运行这些命令;不要将密钥放入浏览器代码。
  • 将 SOLVETHREE_PROXY 设置为你打算用于求解和提交令牌的代理 URL。
  • 在控制台中为你的工作区设置已启用的 reCAPTCHA 站点配置文件。将示例中的 accounts.example.com 和 login 替换为你的主机名和操作。

发送主机名和操作不会创建站点配置文件。请求求解之前,配置文件必须已启用。

创建任务并显式设置等待时间

cURL + jq · 创建一个任务
# 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,然后检索该任务:

任务 API · 获取现有任务
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 工作区额度开始体验。

创建工作区
使用 cURL 请求 reCAPTCHA Enterprise 令牌 · solvethree