将 2Captcha reCAPTCHA 集成迁移到 solvethree

作者:solvethree阅读需 1 分钟

这不仅仅是更改端点。将 clientKey/task 封装结构替换为使用 Bearer 密钥验证的平铺请求,在 solvethree 中配置目标站点,并提供代理。将现有 2Captcha 任务 ID 与新的 solvethree 任务分开管理。

本页内容

检查要迁移的任务

本迁移指南涵盖通过 2Captcha API v2 使用的 reCAPTCHA v3 Enterprise,不涉及旧版 in.php/res.php API。另外,2Captcha 的 API 版本并不是验证码版本:solvethree 不支持 reCAPTCHA v2。

原始请求使用 2Captcha createTask 文档所述的封装结构:凭据位于提供商特定的任务对象之外。

迁移前 · 2Captcha API v2 任务封装
{
  "clientKey": "TWO_CAPTCHA_API_KEY",
  "task": {
    "type": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://accounts.example.com/login",
    "websiteKey": "PUBLIC_SITE_KEY",
    "minScore": 0.7,
    "pageAction": "login",
    "isEnterprise": true
  }
}

不要将此对象原样带入新 API。尤其是,下面的 solvethree 请求不应包含无代理任务类型和 minScore。

配置站点,然后替换请求

首先,在 solvethree 控制台中配置目标站点。工作区必须有处于启用状态的站点配置,才能为该主机名处理求解请求。发送主机名和 action 不会创建站点配置。

使用工作区 API 密钥,通过 Authorization: Bearer 向 https://api.solvethree.com 的 POST /v1/tasks 创建新任务。请将该密钥保存在服务器端。任务创建规范 使用扁平 JSON 请求体,而不是嵌套的 task 对象。

示例请求的变更
示例请求的变更
2Captcha API v2 输入solvethree 替代方式
clientKey将工作区 API 密钥放在 Authorization 请求头中,而不是 JSON 请求体中。
task 包装层移除该层;在顶层发送任务字段。
type: RecaptchaV3TaskProxyless省略 type。必须提供 proxy 或 proxyCandidates 中的一个,且只能提供一个。
websiteURL使用 site,且仅填写主机名:accounts.example.com。不要发送 url。
websiteKey在控制台中配置目标站点,而不是将此字段复制到任务中。
pageAction使用 action,并填写目标的操作值,例如 login。
isEnterprise省略此字段;recaptchaType 默认为 enterprise-v3。
minScore省略此字段;不要将其复制到 solvethree 请求中。
reCAPTCHA Enterprise · 请求结构
{
  "site": "accounts.example.com",
  "action": "login",
  "proxy": "http://user:[email protected]:8080",
  "requestId": "example_login_001"
}

将示例中的主机名、action 和代理替换为目标对应的值。在发送请求前选定 requestId,并保留它以便在超时后恢复任务;每个新的逻辑任务都应使用新值。

示例使用一个代理。也可以使用 proxyCandidates,它最多接受十二个不同的 HTTP 或 HTTPS 代理 URL,且不能包含路径、查询参数或片段。两个字段只能发送其中一个,不能同时发送。候选代理让服务能够尝试其他出口,但不保证一定有可用的代理。

替换轮询和超时处理逻辑

对于仍在处理中的 2Captcha 任务,请继续使用其 getTaskResult 流程,沿用其凭据、任务 ID 和文档规定的轮询策略。其他服务的任务 ID 不是 solvethree 任务句柄。

  1. 1.

    处理创建响应

    在读取成功响应数据前,先检查 HTTP 响应是否成功。reCAPTCHA 创建请求默认最多等待 15 秒,但可能返回尚未进入终态的任务。如果任务已经是 ready 状态,直接使用解答,无需启动轮询循环。

  2. 2.

    仅轮询未完成的任务

    使用 GET /v1/tasks/:id 获取 solvethree 任务。将原先对 processing 的检查改为检查 pending 和 solving;这两种状态都表示任务尚未完成。只有 ready 状态才包含可用的解答。

  3. 3.

    在 URL 中设置等待时间

    GET 轮询默认不等待。要使用长轮询,请在 URL 查询参数中设置 waitMs,最大为 15000,而不是将其作为 JSON 字段发送。HTTP 客户端超时时间应涵盖请求的等待时间以及网络开销。

  4. 4.

    在 failed 状态下停止

    读取 errorCode 和 error,然后停止轮询该任务。求解失败会退款。site-unreachable 等错误需要排查;不要认定所有失败都是余额问题,也不要不断重新提交未经修改的无效输入。

连接超时并不证明创建失败。如果已收到任务 ID,请获取该任务。如果没有收到,请使用相同的 requestId 重复发送相同请求,以恢复已有任务,而不是创建另一次求解。复用该 requestId 时更改任务输入会导致冲突。

在适配器中区分 HTTP 错误与任务终态失败。轮询规范和失败处理介绍了这两种处理路径;不要复用 2Captcha 的错误响应解析器。

更新令牌提取和提交逻辑

将旧适配器中的令牌查找逻辑替换为读取 ready 状态的 solvethree 任务中的 solution.token。将该令牌提交到目标预期接收 reCAPTCHA 值的位置,而不是提交任务 ID 或整个 solution 对象。

提交令牌时,使用返回的 userAgent 和 secChUa 浏览器身份信息,并使用求解成功时所用的代理。如果提供了 proxyCandidates,请使用求解成功时所用的代理,而不是另选一个候选代理进行提交。

任务处于 ready 状态表示已生成解答,并不表示网站已接受你的应用请求。如果目标拒绝请求,请先检查发出的令牌、action、目标 URL、代理和浏览器身份信息,再付费进行下一次求解。

运行您的第一个任务。

使用 $5 工作区额度开始体验。

创建工作区
将 2Captcha reCAPTCHA 集成迁移到 solvethree · solvethree