本指南只做一件事:让你以最快速度发出第一次成功的 API 调用并拿回令牌。不讲理论,不长篇大论,直奔可运行的代码。
CaptchaAI 支持的所有验证码类型都遵循同一个四步模式:
- 提交 —— 把验证码参数发到
in.php - 拿任务 ID —— 从响应里保存任务 ID
- 轮询 —— 每 5 秒查询一次
res.php,直到结果就绪 - 使用令牌 —— 把token 提交目标页面或请求
第 0 步:获取 API Key
- 在 captchaai.com 注册账号
- 打开 仪表板
- 复制 32 位 API Key
账户必须有可用线程才能提交任务。如果在评估服务,可以联系客服申请试用线程。
第 1 步:提交一个验证码
下面用 Cloudflare Turnstile 演示——这是当前最常见的验证码类型之一。你需要从目标页面拿到两个输入:
- sitekey —— Turnstile 控件的公开密钥(在
data-sitekey属性或 Turnstile 脚本参数里,以0x开头) - pageurl —— 加载该控件的完整页面 URL
cURL
curl -X POST "https://ocr.captchaai.com/in.php" \
-d "key=YOUR_API_KEY" \
-d "method=turnstile" \
-d "sitekey=0x4AAAAAAAC3DHQFLr1GavNl" \
-d "pageurl=https://staging.example.com/qa-login" \
-d "json=1"
Python
import requests
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": "YOUR_API_KEY",
"method": "turnstile",
"sitekey": "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl": "https://staging.example.com/qa-login",
"json": 1,
})
print(response.json())
Node.js
const response = await fetch("https://ocr.captchaai.com/in.php", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: "YOUR_API_KEY",
method: "turnstile",
sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
pageurl: "https://staging.example.com/qa-login",
json: "1",
}),
});
console.log(await response.json());
PHP
<?php
$response = file_get_contents("https://ocr.captchaai.com/in.php?" . http_build_query([
"key" => "YOUR_API_KEY",
"method" => "turnstile",
"sitekey" => "0x4AAAAAAAC3DHQFLr1GavNl",
"pageurl" => "https://staging.example.com/qa-login",
"json" => 1,
]));
echo $response;
第 2 步:保存任务 ID
成功响应:
{
"status": 1,
"request": "71823469"
}
request 字段是你的任务 ID,下一步要用到。
如果 status 为 0,说明出错了。检查 request 字段里的错误码:
| 错误码 | 含义 | 解决方案 |
|---|---|---|
ERROR_WRONG_USER_KEY |
API Key 格式错误 | 确认 32 位 Key 没拼错 |
ERROR_KEY_DOES_NOT_EXIST |
API Key 不存在 | 在仪表板核对 Key |
ERROR_ZERO_BALANCE |
没有可用线程 | 充值或等待线程释放 |
ERROR_PAGEURL |
缺少 pageurl 参数 | 补上完整页面 URL |
ERROR_WRONG_GOOGLEKEY |
sitekey 为空或格式错误 | 重新提取 sitekey(Turnstile 以 0x 开头) |
第 3 步:轮询结果
先等 15 秒,然后每 5 秒查询一次。
Python
import time
time.sleep(15)
while True:
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": "YOUR_API_KEY",
"action": "get",
"id": "71823469",
"json": 1,
}).json()
if result.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result.get("status") == 1:
token = result["request"]
print(f"Solved! Token: {token[:60]}...")
break
raise RuntimeError(result)
Node.js
await new Promise((r) => setTimeout(r, 15000));
while (true) {
const r = await fetch(
`https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=71823469&json=1`,
);
const data = await r.json();
if (data.request === "CAPCHA_NOT_READY") {
await new Promise((r) => setTimeout(r, 5000));
continue;
}
if (data.status === 1) {
console.log("Solved:", data.request.slice(0, 60));
break;
}
throw new Error(JSON.stringify(data));
}
第 4 步:使用令牌
不同验证码类型,注入方式略有不同:
- Turnstile / reCAPTCHA:写入
cf-turnstile-response或g-recaptcha-response文本域,或调用页面回调函数。 - 图像 OCR:把识别出的文本填入答案输入框。
- GeeTest / FunCaptcha:把返回的多个字段按页面要求拼装。
最简单的浏览器内注入示例:
document.querySelector('[name="cf-turnstile-response"]').value = token;
document.querySelector("form").submit();
常见踩坑
- API Key 复制时带了空格 —— 删干净再用。
- pageurl 漏了协议头 —— 必须是
https://开头的完整地址。 - 首次轮询太早 —— 务必先等 15 秒,否则只是浪费请求。
- 轮询过于频繁 —— 5 秒一次足够,更快不会更早出结果。
- 线程已用完 —— 看 常见错误码 与你的套餐线程数。
下一步
按你最常遇到的验证码类型继续:
- 使用 API 解决 reCAPTCHA v2
- 使用 API 解决 Cloudflare Turnstile
- 使用 API 解决 GeeTest v3
- 使用 API 解决图像验证码
立即在 captchaai.com/api.php 获取你的 API Key,5 分钟内完成第一次成功求解。