CaptchaAI 支持将您自己的代理传递给解决 API – 这使得 CaptchaAI 从您的代理 IP 解析验证码,确保令牌与加载页面的 IP 匹配。以下是如何配置每种身份验证方法。
何时将代理传递给 CaptchaAI
| 设想 | 通过代理? | 为什么 |
|---|---|---|
| 标准reCAPTCHA v2 | 通常不需要 | 令牌可在任何 IP 上使用 |
| reCAPTCHA v3 | 选修的 | 分数可能取决于 IP |
| Cloudflare Turnstile | 受到推崇的 | 令牌是IP绑定的 |
| Cloudflare 验证流程 | 必需的 | 与知识产权相关的挑战 |
| IP 绑定会话 | 必需的 | 根据源 IP 验证令牌 |
认证方式
1. 用户名/Password (HTTP)
import requests
import time
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_with_http_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass HTTP proxy to CaptchaAI for IP-matched solving."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Timeout")
# Usage
token = solve_with_http_proxy(
site_url="https://example.com/form",
sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
proxy_host="proxy.example.com",
proxy_port=8080,
proxy_user="myuser",
proxy_pass="mypass",
)
2. 用户名/Password (SOCKS5)
def solve_with_socks5_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
"""Pass SOCKS5 proxy to CaptchaAI."""
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "SOCKS5",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
3. IP白名单(无授权)
一些代理提供商通过 IP 白名单而不是凭据进行身份验证:
def solve_with_whitelisted_proxy(site_url, sitekey, proxy_host, proxy_port):
"""Proxy with IP whitelist — no username/password."""
proxy_param = f"{proxy_host}:{proxy_port}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTP",
"json": 1,
})
data = resp.json()
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
重要提示: 对于 IP 白名单代理,您还必须将 CaptchaAI 的服务器 IP 列入白名单,因为 CaptchaAI 的服务器将连接到您的代理。
4.HTTPS(连接)代理
def solve_with_https_proxy(site_url, sitekey, proxy_host, proxy_port,
proxy_user, proxy_pass):
proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "HTTPS",
"json": 1,
})
# ... same polling logic ...
Node.js 示例
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const API = "https://ocr.captchaai.com";
async function solveWithProxy(siteUrl, sitekey, proxyConfig) {
const params = {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
proxy: `${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
proxytype: proxyConfig.type || "HTTP",
json: 1,
};
const submit = await axios.post(`${API}/in.php`, null, { params });
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get(`${API}/res.php`, {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
// Usage
const token = await solveWithProxy(
"https://example.com/form",
"6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
{
host: "proxy.example.com",
port: 8080,
user: "myuser",
pass: "mypass",
type: "HTTP", // HTTP, HTTPS, SOCKS4, or SOCKS5
}
);
代理参数格式参考
| 代理类型 | 代理格式 | 例子 |
|---|---|---|
HTTP |
host:port:user:pass |
proxy.com:8080:user:pass |
HTTPS |
host:port:user:pass |
proxy.com:8443:user:pass |
SOCKS4 |
host:port:user:pass |
proxy.com:1080:user:pass |
SOCKS5 |
host:port:user:pass |
proxy.com:1080:user:pass |
| IP白名单 | host:port |
proxy.com:8080 |
提供商特定格式
# Bright Data
proxy = "brd.superproxy.io:22225:brd-customer-ID-zone-residential:PASSWORD"
proxytype = "HTTP"
# Smartproxy
proxy = "gate.smartproxy.com:10001:spuser:sppassword"
proxytype = "HTTP"
# Oxylabs
proxy = "pr.oxylabs.io:7777:customer-USERNAME:PASSWORD"
proxytype = "HTTP"
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
ERROR_PROXY_NOT_AUTHORIZED |
凭据错误或 IP 未列入白名单 | 验证代理凭据;白名单 CaptchaAI IP |
ERROR_PROXY_CONNECTION_FAILED |
从 CaptchaAI 无法访问代理 | 检查代理是否可以从外部 IP 访问 |
| 令牌被目标拒绝 | 代理 IP 与页面加载 IP 不匹配 | 两者使用相同的粘性会话 |
| 使用代理解决速度慢 | 代理会增加延迟 | 接受或使用更快的代理 |
ERROR_BAD_PARAMETERS |
代理格式错误 | 使用host:port:user:pass格式 |
常问问题
我总是需要通过代理吗?
不会。大多数 reCAPTCHA v2 实现不会将令牌绑定到 IP。仅传递 IP 绑定质询的代理(Cloudflare、某些 OAuth 流)。
通过代理会减慢解决速度吗?
稍微 - CaptchaAI 需要通过您的代理进行路由。在典型求解时间上增加 2-5 秒。
我可以将旋转代理与 CaptchaAI 的代理参数一起使用吗?
使用粘性会话。如果您通过旋转代理,CaptchaAI 可能会从与加载页面的 IP 不同的 IP 进行解析。
如果我的代理失败会发生什么?
CaptchaAI 返回 ERROR_PROXY_CONNECTION_FAILED。使用后备代理实现重试逻辑。
相关指南
- SOCKS5代理+CaptchaAI
- 代理质量影响解决率
- 光明数据+CaptchaAI
将您的代理传递给 CaptchaAI 以进行 IP 匹配的验证码解决 -获取您的 API 密钥.