使用 Axios 提交 CAPTCHA 解答
使用 Node.js SDK 解题,然后通过 Axios 发出目标请求。将成功使用的代理传给 HttpsProxyAgent,并设置 proxy: false,以免 Axios 应用相冲突的代理配置。表单字段、CSRF 值和会话 Cookie 仍需由应用提供。
本页内容
安装并配置 SDK
使用 Node.js 22+,并通过 npm install axios https-proxy-agent https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz 安装依赖项。官方 SDK 通过该 tarball URL 分发;不要替换为臆测的 npm 注册表软件包。
- 将
SOLVETHREE_API_KEY设为工作区 API 密钥。在服务器端运行此代码,并将密钥保留在服务器端。 - 将
SOLVETHREE_PROXY设为解题和提交共同使用的代理 URL。 - 解题前,先在控制台中为目标网站创建有效配置。提供主机名和操作名称不会创建配置。请参阅站点配置设置。
- 将示例中的主机名、操作名称和登录 URL 替换为应用所用的值。
site是主机名,而不是完整 URL;操作名称必须与目标操作匹配。
先解题,再通过成功使用的代理提交
client.solve() 创建任务并轮询,直到任务就绪或抛出异常。随后,示例通过 successfulProxy(input, result) 选择最初成功使用的代理,并将其用于 Axios 请求。
// npm install axios https-proxy-agent and the official solvethree SDK tarball.
import axios from 'axios';
import { HttpsProxyAgent } from 'https-proxy-agent';
import { Solvethree, successfulProxy } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const input = { site: 'accounts.example.com', action: 'login', proxy: process.env.SOLVETHREE_PROXY };
const result = await client.solve(input);
const proxy = successfulProxy(input, result);
if (!proxy) throw new Error('No valid successful proxy');
const agent = new HttpsProxyAgent(proxy);
try {
const response = await axios.post('https://accounts.example.com/login',
new URLSearchParams({ 'g-recaptcha-response': result.solution.token }).toString(), {
httpsAgent: agent, proxy: false, maxRedirects: 0, timeout: 30000,
headers: { 'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': result.solution.userAgent, 'sec-ch-ua': result.solution.secChUa },
validateStatus: () => true,
});
console.log('Application HTTP status:', response.status);
// Add the application's real form fields, CSRF value and session cookies.
} finally { agent.destroy(); }httpsAgent 通过所选代理路由目标 HTTPS 请求。proxy: false 禁用 Axios 的独立代理配置,由 agent 控制代理。这配置的是目标请求,而不是 SDK 到 solvethree API 的连接。请求完成或失败时,agent 会被销毁。
将返回的 userAgent 和 secChUa 值与该代理配套使用。提交令牌时,不要将它们替换为无关的浏览器请求头。
检查应用响应
Axios 调用的超时时间为 30 秒,且不跟随重定向。由于 validateStatus 接受所有 HTTP 状态,请自行检查 response.status 和响应正文;HTTP 错误响应不会仅因其状态而抛出异常。
任务就绪表示已生成解决方案,并不表示目标已接受它。请检查应用实际的成功条件,不要将日志中的 HTTP 状态视为登录成功的证明。
来源与 API 参考
运行您的第一个任务。
使用 $5 工作区额度开始体验。