Tutorials

Отладка вызовов API CAPTCHA с помощью Charles Proxy

Код отправляет запрос, sitekey скопирован верно, а API всё равно отвечает ERROR_WRONG_GOOGLEKEY или зависает после десятков опросов res.php. Логов приложения тут обычно не хватает — нужно увидеть сам HTTP-трафик. Charles Proxy встаёт между кодом и CaptchaAI и показывает каждый запрос, ответ и время выполнения.


Настройка Charles Proxy для CaptchaAI

Шаг 1: установите Charles Proxy

Скачайте с charlesproxy.com. Есть сборки под Windows, macOS и Linux.

Шаг 2: включите SSL-прокси для ocr.captchaai.com

CaptchaAI работает только по HTTPS — без этой настройки Charles покажет лишь зашифрованный набор байт:

  1. ProxySSL Proxying SettingsAdd
  2. Host: ocr.captchaai.com, Port: 443
  3. HelpSSL ProxyingInstall Charles Root Certificate
  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,
});

Разбор типичных проблем

ERROR_WRONG_GOOGLEKEY: пустой sitekey

Откройте в Charles тело запроса на отправку и найдите поле googlekey:

# What Charles shows:
key=YOUR_API_KEY&method=userrecaptcha&googlekey=&pageurl=https://example.com&json=1
                                      ^^^^^^^^ empty!

Причина обычно одна: sitekey не извлёкся на предыдущем шаге. Проверьте код извлечения, а не отправку в CaptchaAI.

Токен API не принимается на целевом сайте

Сверьте, что вернул CaptchaAI, с тем, что ушло дальше:

  1. В Charles найдите ответ /res.php со status: 1.
  2. Скопируйте полный токен из поля request.
  3. Найдите следующий запрос на целевой сайт.
  4. Убедитесь, что токен передан в теле формы под именем g-recaptcha-response.

Опрос res.php никогда не завершается

Переключитесь на вид 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 или pageurl, а не CaptchaAI.


Что искать в перехваченном трафике

Запрос на отправку задачи (POST /in.php)

В Charles откройте запрос к /in.php и проверьте по вкладкам:

Вкладка Что проверить
Request → Headers Content-Type указан верно
Request → Body присутствуют все обязательные параметры
Response → Body при успехе — {"status":1,"request":"TASK_ID"}
Timing длительность запроса (в норме <1 с)

Типичные находки в Charles:

  • параметр method отсутствуетERROR_BAD_PARAMETERS
  • неверный Content-Type → параметры не разбираются
  • пустой googlekeyERROR_WRONG_GOOGLEKEY
  • тело запроса в формате JSON → нужны form data, а не JSON

Запрос на опрос результата (GET /res.php)

В запросах опроса проверяйте:

  • параметры: key, action=get, id=TASK_ID;
  • ответ: CAPCHA_NOT_READY (опрос продолжается) либо {"status":1,"request":"TOKEN"};
  • интервал: за каждым опросом должна идти пауза перед следующим.

Если воркеры развёрнуты в Европе или Казахстане, вкладка Timing отдельно покажет сетевую задержку и время ответа сервера — в логах эти два фактора неразличимы, здесь видно оба.


Типичные ошибки при отладке

Сначала сверьтесь с таблицей, прежде чем копать глубже:

Проблема Причина Что делать
SSL-ошибки в коде сертификат Charles не в доверенных установите корневой сертификат Charles; verify=False — только для разработки
Запросы не видны код не использует прокси пропишите прокси в конфиге requests/axios
HTTPS-ответ выглядит как мусор SSL-прокси не включён добавьте ocr.captchaai.com в SSL Proxying Settings
Charles ощутимо тормозит запросы включены breakpoints отключайте breakpoints, когда они не нужны

Часто задаваемые вопросы

Нужен ли Charles Proxy в продакшене?

Нет, это инструмент разовой отладки, не постоянного мониторинга — в production нужны структурированное журналирование и алертинг.

Влияет ли перехват через Charles на скорость или результат решения CAPTCHA?

Нет — CaptchaAI не отличает трафик через Charles от обычного, запрос проходит прозрачно.

Почему Charles не показывает содержимое HTTPS, хотя прокси уже настроен?

Обычно не включён SSL Proxying для ocr.captchaai.com, либо корневой сертификат Charles не добавлен в доверенные ОС.

Можно ли отлаживать API без установки GUI-приложения на сервер?

Да — для серверов и CI без GUI удобнее mitmproxy: запускается из терминала, трафик можно писать в файл.


Инструменты Charles для отладки CAPTCHA-запросов

Когда базового перехвата уже недостаточно, пригодятся более точечные функции Charles.

Repeat — повтор запроса

Правый клик по запросу → Repeat, чтобы отправить его заново. Удобно для опроса res.php — не нужно перезапускать весь скрипт.

Breakpoints — точки останова

Точка останова на /in.php позволяет посмотреть и поправить запрос до отправки:

  1. ProxyBreakpoint SettingsAdd
  2. Host: ocr.captchaai.com, Path: /in.php
  3. Отметьте Request
  4. Теперь код останавливается перед отправкой — параметры можно отредактировать вручную.

Map Local — подмена ответа API

Позволяет тестировать обработку ответа без обращения к CaptchaAI:

  1. ToolsMap LocalAdd
  2. Сопоставьте https://ocr.captchaai.com/res.php с локальным JSON-файлом.
  3. Создайте mock_response.json:
{"status": 1, "request": "mock_token_for_testing"}

Так можно проверить код передачи токена без реальных задач.

Throttle — имитация медленной сети

Часть воркеров работает через нестабильный мобильный канал — стоит проверить это до релиза:

  1. ProxyThrottle Settings → включите
  2. Выберите пресет 3G или EDGE.
  3. Проверьте, что код корректно обрабатывает медленные ответы и не падает по таймауту.

Чем заменить Charles Proxy

Инструмент Платформа HTTPS Стоимость
Charles Proxy Win/Mac/Linux нужен сертификат платно (есть пробный период)
mitmproxy Win/Mac/Linux нужен сертификат бесплатно
Fiddler Windows встроенная расшифровка HTTPS бесплатно
Proxyman macOS настройка HTTPS в один клик freemium

Быстрый старт с mitmproxy

# Install
pip install mitmproxy

# Run
mitmproxy --listen-port 8080

# Configure Python
proxies = {"https": "http://localhost:8080"}

Удобно на headless-воркере в CI без GUI.


Отладка и оптимизация интеграции CaptchaAI

Получите API-ключ на captchaai.com и повторите эти шаги на своей интеграции.


Похожие материалы

Комментарии для этой статьи отключены.