当您的 CAPTCHA 集成返回意外错误时,检查原始 HTTP 流量可揭示实际发送和接收的内容。 Charles Proxy 位于您的代码和 CaptchaAI 之间,让您可以查看每个请求、响应和计时详细信息。
设置
1.安装Charles代理
下载自查尔斯代理网。适用于 Windows、macOS 和 Linux。
2.启用SSL代理
CaptchaAI 使用 HTTPS。要检查加密流量:
- 代理 → SSL 代理设置 → 添加
- 主机:
ocr.captchaai.com,端口:443 - 帮助 → SSL 代理 → 安装 Charles 根证书
- 信任操作系统证书存储中的证书
3. 配置您的代码以使用 Charles
Charles 默认在 localhost:8888 上运行。
Python:
import requests
proxies = {
"http": "http://localhost:8888",
"https": "http://localhost:8888",
}
# Disable SSL verification for Charles (development only)
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data={"key": "YOUR_API_KEY", "method": "userrecaptcha", "json": "1"},
proxies=proxies,
verify=False,
)
Node.js:
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://localhost:8888');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: { key: 'YOUR_API_KEY', method: 'userrecaptcha', json: 1 },
httpsAgent: agent,
});
检查什么
提交请求(POST /in.php)
在 Charles 中,单击对 /in.php 的请求。查看:
| 选项卡 | 要验证什么 |
|---|---|
| 请求 → 标头 | 内容类型正确 |
| 请求 → 正文 | 存在所有必需的参数 |
| 反应 → 身体 | {"status":1,"request":"TASK_ID"} 成功 |
| 定时 | 请求持续时间(应<1s) |
Charles 中常见的问题:
- 缺少
method参数 →ERROR_BAD_PARAMETERS - 内容类型错误 → 参数未解析
- 空
googlekey→ERROR_WRONG_GOOGLEKEY - 格式错误的 JSON 正文 → 使用表单数据,而不是 JSON 正文
投票请求 (GET /res.php)
检查投票请求:
- 参数:
key、action=get、id=TASK_ID - 响应:
CAPCHA_NOT_READY(继续轮询)或{"status":1,"request":"TOKEN"} - 时间:每次民意调查后跟随您的睡眠间隔
调试常见问题
问题:ERROR_WRONG_GOOGLEKEY
在 Charles 中,查看提交请求正文。找到 googlekey 字段:
# What Charles shows:
key=YOUR_API_KEY&method=userrecaptcha&googlekey=&pageurl=https://example.com&json=1
^^^^^^^^ empty!
修复:上游站点密钥提取失败。检查您的提取码。
问题:令牌被目标站点拒绝
比较 CaptchaAI 返回的内容与您注入的内容:
- 在 Charles 中,使用
status: 1查找/res.php响应 - 从
request字段复制完整令牌 - 查找目标站点的后续请求
- 验证表单正文中的令牌为
g-recaptcha-response
问题:请求超时
使用 Charles Sequence 视图查看时序:
POST /in.php → 234ms ✓
GET /res.php → 189ms (CAPCHA_NOT_READY)
GET /res.php → 201ms (CAPCHA_NOT_READY)
GET /res.php → 195ms (CAPCHA_NOT_READY)
... 23 more ...
GET /res.php → 188ms (CAPCHA_NOT_READY) ← never resolves
如果始终无法解决:检查 sitekey 和页面 URL 是否正确。
Charles 验证码调试功能
重复请求
右键单击任何请求 → 重复 以重新发送。对于测试轮询请求非常有用,无需重新运行整个脚本。
断点
在 /in.php 上设置断点以在发送之前检查和修改请求:
- 代理 → 断点设置 → 添加
- 主机:
ocr.captchaai.com,路径:/in.php - 检查请求
- 现在您的代码在发送之前暂停 - 您可以编辑参数
本地地图
将 API 响应替换为本地文件进行测试:
- 工具 → 地图本地 → 添加
- 将
https://ocr.captchaai.com/res.php映射到本地 JSON 文件 - 创建
mock_response.json:
{"status": 1, "request": "mock_token_for_testing"}
这使您可以在不使用 API 积分的情况下测试token 提交代码。
风门
模拟慢速连接:
- 代理 → 限制设置 → 启用
- 将预设设置为 3G 或 EDGE 级 速度
- 测试您的代码是否正确处理缓慢响应和超时
查尔斯的替代品
| 工具 | 平台 | HTTPS | 成本 |
|---|---|---|---|
| 查尔斯·普罗克斯 | Win/Mac/Linux | 需要证书安装 | 付费(免费试用) |
| 米特普罗西 | Win/Mac/Linux | 需要证书安装 | 自由的 |
| 提琴手 | 视窗 | 内置HTTPS解密 | 自由的 |
| 代理人 | macOS | 一键 HTTPS 设置 | 免费增值 |
mitmproxy 快速设置
# Install
pip install mitmproxy
# Run
mitmproxy --listen-port 8080
# Configure Python
proxies = {"https": "http://localhost:8080"}
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 代码中的 SSL 错误 | 查尔斯证书不受信任 | 安装 Charles 根证书;使用 verify=False 进行开发 |
| 没有可见的请求 | 代码不使用代理 | 在 requests/axios 配置中设置代理 |
| HTTPS 响应乱码 | SSL 代理未启用 | 将 ocr.captchaai.com 添加到 SSL 代理设置 |
| 查尔斯放慢了请求速度 | 已启用断点 | 不需要时禁用断点 |
常问问题
我应该在生产中使用 Charles 吗?
不,Charles 是一个开发和调试工具。使用结构化日志记录和监控来实现生产可观察性。
通过 Charles 路由是否会影响验证码解决?
不会。CaptchaAI 不会将 Charles 视为代理——您的请求会透明地传递。
调试和优化您的 CaptchaAI 集成
获取您的 API 密钥:验证码网站。
相关指南
- CAPTCHA 操作的结构化日志记录
- CaptchaAI 错误代码参考
- CaptchaAI API 测试的 Postman 集合