实战教程

使用 Charles 代理调试 CAPTCHA API 调用

当您的 CAPTCHA 集成返回意外错误时,检查原始 HTTP 流量可揭示实际发送和接收的内容。 Charles Proxy 位于您的代码和 CaptchaAI 之间,让您可以查看每个请求、响应和计时详细信息。


设置

1.安装Charles代理

下载自查尔斯代理网。适用于 Windows、macOS 和 Linux。

2.启用SSL代理

CaptchaAI 使用 HTTPS。要检查加密流量:

  1. 代理SSL 代理设置添加
  2. 主机:ocr.captchaai.com,端口:443
  3. 帮助SSL 代理安装 Charles 根证书
  4. 信任操作系统证书存储中的证书

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
  • 内容类型错误 → 参数未解析
  • googlekeyERROR_WRONG_GOOGLEKEY
  • 格式错误的 JSON 正文 → 使用表单数据,而不是 JSON 正文

投票请求 (GET /res.php)

检查投票请求:

  • 参数keyaction=getid=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 返回的内容与您注入的内容:

  1. 在 Charles 中,使用 status: 1 查找 /res.php 响应
  2. request 字段复制完整令牌
  3. 查找目标站点的后续请求
  4. 验证表单正文中的令牌为 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 上设置断点以在发送之前检查和修改请求:

  1. 代理断点设置添加
  2. 主机:ocr.captchaai.com,路径:/in.php
  3. 检查请求
  4. 现在您的代码在发送之前暂停 - 您可以编辑参数

本地地图

将 API 响应替换为本地文件进行测试:

  1. 工具地图本地添加
  2. https://ocr.captchaai.com/res.php 映射到本地 JSON 文件
  3. 创建mock_response.json
{"status": 1, "request": "mock_token_for_testing"}

这使您可以在不使用 API 积分的情况下测试token 提交代码。

风门

模拟慢速连接:

  1. 代理限制设置 → 启用
  2. 将预设设置为 3GEDGE 级 速度
  3. 测试您的代码是否正确处理缓慢响应和超时

查尔斯的替代品

工具 平台 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 密钥:验证码网站


相关指南

该文章已禁用评论。