从 n8n 调用 CAPTCHA 求解 API
使用 n8n 的 HTTP Request 节点创建任务,然后根据任务状态分支。如果任务仍在等待或求解中,请等待后查询同一个任务 ID,不要再次发送 POST。
本页内容
设置站点和凭据
- 1.
启用站点配置文件
在 solvethree 控制台中设置目标主机名,并确保其配置文件已在你的工作区中启用。在任务中发送主机名和操作并不会创建配置文件。
- 2.
在 n8n 中创建请求头身份验证凭据
将其配置为发送
Authorization请求头,值为Bearer后接你的工作区 API 密钥。将密钥存储在凭据中,而不是任务 JSON 中。
配置创建请求
将 HTTP Request 节点命名为 Create task。轮询节点将引用此名称来获取原始任务 ID。
| 字段 | 设置 |
|---|---|
| 方式 | POST |
| URL | https://api.solvethree.com/v1/tasks |
| 身份验证 | 通用凭据类型 |
| 通用身份验证类型 | 请求头身份验证;选择你创建的凭据 |
| 发送查询参数 | 启用;添加 waitMs,值设为 15000 |
| 发送请求体 | 启用;选择 JSON 并使用下面的请求体 |
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://user:[email protected]:8080",
"requestId": "example_login_001"
}将 site、action 和 proxy 替换为本次请求的主机名、操作和代理。proxy 和 proxyCandidates 必须且只能发送其中一个;此示例使用单个代理。不要添加 type 或 url。默认 reCAPTCHA 类型为 Enterprise v3。
为每个新的逻辑任务,将示例中的 requestId 替换为唯一值。如果需要在超时后恢复此任务,请保持该值不变。它接受 1–64 个 ASCII 字母、数字、下划线或连字符。
waitMs 应放在 URL 查询参数中,而不是 JSON 请求体中。将 HTTP 请求超时设为大于所请求的 15 秒等待时间,以留出网络开销;30 秒是一个合理的初始配置,并非求解时间保证。请求头身份验证凭据会提供身份验证信息,因此无需在“发送请求头”中重复配置。
根据状态分支,而不是 HTTP 是否成功
检查任务载荷之前,先处理非成功的 HTTP 响应。对于成功响应,连接 IF 或 Switch 节点并检查 {{ $json.status }}。
| 状态 | 下一步操作 |
|---|---|
| ready | 退出轮询循环并使用解决结果。 |
| failed | 停止轮询。记录 errorCode 和 error,以便诊断。 |
| pending 或 solving | 检查轮询截止时间,然后等待并通过 GET 查询现有任务。 |
对于已就绪的 reCAPTCHA 任务,使用返回的 userAgent 和 secChUa 身份信息以及求解成功时使用的代理,提交返回的令牌。任务就绪表示已生成解决结果,并不代表网站接受了后续请求。
求解失败会退款。请诊断报告的错误,而不是用未修改的输入重试,或直接认定工作区余额不足。
等待后通过 GET 查询原始 ID
- 1.
保存固定截止时间
在 Create task 运行之前,在工作流中存储轮询截止时间,例如创建开始后的两分钟。这是工作流的停止策略,而不是 solvethree API 的限制。将截止时间保存在 HTTP 响应之外,以免后续响应覆盖它。
- 2.
为每轮轮询设置检查
对于等待中或求解中的任务,使用 IF 节点比较当前时间与保存的截止时间。如果已过期,则结束循环并保留任务 ID。否则,使用 Wait 节点暂停两秒,然后在发送 GET 之前再次检查截止时间。
- 3.
查询现有任务
按照以下设置配置第二个 HTTP Request 节点。将其响应送回同一个状态分支。绝不要将轮询分支重新连接到 Create task。
| 字段 | 设置 |
|---|---|
| 方式 | GET |
| URL | https://api.solvethree.com/v1/tasks/{{ $('Create task').item.json.id }} |
| 身份验证 | 通用凭据类型 |
| 通用身份验证类型 | 请求头身份验证;选择同一个凭据 |
| 发送查询参数 | 启用;添加 waitMs,值设为 15000 |
| 发送请求体 | 禁用 |
任务 ID 表达式为 {{ $('Create task').item.json.id }}。即使最新数据项包含的是轮询响应或其他工作流数据,它也会从指定名称的创建节点中读取 id。请确保表达式中的节点名称与你的工作流一致。
GET 接受最长 15 秒的等待时间。为此 HTTP 请求设置与创建请求相同的超时余量。截止时间会阻止发起新的轮询;已在执行的请求可能在截止时间之后完成。
在 n8n 之外,等效的 GET 请求为:
curl --fail-with-body --max-time 30 \
"https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
-H "Authorization: Bearer $SOLVETHREE_API_KEY"恢复超时的 POST,而不创建另一个任务
连接超时并不能证明创建失败。如果收到了 ID,请查询该任务。如果没有收到,请使用相同的任务输入和相同的 requestId 再次发送 POST,以恢复现有任务。使用不同的任务输入重复使用该 ID 会导致冲突。
同样,达到轮询截止时间只是本地停止条件,并不表示任务状态为失败。请保留原始 ID,以便后续执行查询该任务,而不是再次付费求解。
运行您的第一个任务。
使用 $5 工作区额度开始体验。