Tutorials

Использование Fiddler для проверки трафика API CaptchaAI

Запрос к in.php падает, а в логах — только «request failed» без тела ответа и заголовков. Здесь помогает не ещё один print(), а перехват реального HTTP-трафика между кодом и API CaptchaAI: Fiddler показывает точные payload, заголовки и тайминги каждого запроса, и причина обычно находится за пару минут.

Когда логов недостаточно и нужен Fiddler

Ситуация Что покажет Fiddler
Ошибка API, но логи скудные Полное тело запроса, заголовки, ответ сервера
Запрос на решение зависает Дошёл ли запрос до сервера или истёк тайм-аут
Токен невалиден при подстановке Точное содержимое токена, проблемы кодировки
Сбои после включения прокси Идёт ли трафик через нужный прокси
Похоже на ограничение частоты запросов Тайминг запросов и шаблон ответов 429

Пример из практики: команда тестирует интеграцию с BLS CAPTCHA для визового портала и не может понять, почему pageurl иногда пустой, — без перехвата трафика это не отличить от бага в API.

Настройка Fiddler для перехвата HTTPS-трафика

Шаг 1: включите расшифровку HTTPS

Fiddler работает как локальный прокси и перехватывает HTTPS-трафик. Чтобы увидеть содержимое запросов к CaptchaAI, расшифровку нужно явно включить:

Fiddler Everywhere:

  1. Откройте «Настройки» — HTTPS.
  2. Включите «Захват HTTPS-трафика».
  3. Установите корневой сертификат Fiddler при появлении соответствующего запроса.
  4. Доверяйте сертификату в хранилище сертификатов вашей ОС.

Fiddler Classic (Windows):

  1. Инструменты → Параметры → HTTPS.
  2. Установите флажок «Расшифровать HTTPS-трафик».
  3. Нажмите «Действия» → «Доверительный корневой сертификат».

Шаг 2: направьте код через прокси Fiddler

Fiddler слушает 127.0.0.1:8866 (Fiddler Everywhere) или 127.0.0.1:8888 (Fiddler Classic).

Python (requests):

import requests

proxies = {
    "http": "http://127.0.0.1:8866",
    "https": "http://127.0.0.1:8866",
}

# Submit CAPTCHA task through Fiddler
response = requests.post(
    "https://ocr.captchaai.com/in.php",
    data={
        "key": "YOUR_API_KEY",
        "method": "userrecaptcha",
        "googlekey": "SITE_KEY",
        "pageurl": "https://example.com",
        "json": 1,
    },
    proxies=proxies,
    verify=False,  # Required for Fiddler's self-signed cert
)
print(response.json())

JavaScript (Node.js с Axios):

const axios = require("axios");
const HttpsProxyAgent = require("https-proxy-agent");

const agent = new HttpsProxyAgent("http://127.0.0.1:8866");

async function submitTask() {
  const response = await axios.post(
    "https://ocr.captchaai.com/in.php",
    new URLSearchParams({
      key: "YOUR_API_KEY",
      method: "userrecaptcha",
      googlekey: "SITE_KEY",
      pageurl: "https://example.com",
      json: 1,
    }),
    {
      httpsAgent: agent,
      proxy: false, // Disable axios default proxy handling
    }
  );
  console.log(response.data);
}

submitTask();

Важно. verify=False (Python) отключает проверку SSL сертификата Fiddler. Используйте это только при отладке — в продакшене строки быть не должно.

Проверка API через Composer без единой строки кода

Прежде чем настраивать фильтры и точки останова, проверьте, что API вообще отвечает. Composer собирает запрос к CaptchaAI прямо в Fiddler — быстрее, чем писать скрипт ради одной проверки.

Отправка задачи:

POST https://ocr.captchaai.com/in.php
Content-Type: application/x-www-form-urlencoded

key=YOUR_API_KEY&method=userrecaptcha&googlekey=SITE_KEY&pageurl=https://example.com&json=1

Опрос результата:

GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1

Фильтрация запросов к CaptchaAI

В загруженной сессии проще сразу отсечь всё, кроме CaptchaAI.

Фильтры в Fiddler Everywhere

  1. Откройте вкладку Filters.
  2. Добавьте правило: Hostcontainsocr.captchaai.com.
  3. Примените фильтр.

Фильтры в Fiddler Classic

  1. Откройте вкладку Filters.
  2. Установите флажок «Use Filters».
  3. В разделе «Hosts» выберите «Show only the following Hosts».
  4. Введите: ocr.captchaai.com.

В списке сессий остаются только запросы к API CaptchaAI.

Точки останова: правка запроса на лету

Точки останова приостанавливают запрос перед отправкой и дают его изменить.

Установка точки останова

Fiddler Everywhere:

  1. Rules → Add Rule.
  2. Условие: URL содержит ocr.captchaai.com/in.php.
  3. Действие: «Pause before sending».

Fiddler Classic:

  1. Rules → Automatic Breakpoints → Before Requests.
  2. Или введите bpu ocr.captchaai.com в панели QuickExec.

Что делать, пока запрос на паузе

  1. Проверьте тело запроса — все параметры на месте.
  2. Измените параметрmethod, googlekey или pageurl.
  3. Отпустите запрос — «Run to Completion» отправляет изменённую версию.
  4. Посмотрите ответ — исчезла ли проблема.

Что проверять в запросе и ответе

Отправка задачи (in.php)

Панель Что проверить
Headers Content-Type должен быть application/x-www-form-urlencoded.
Тело запроса Значения key, method, googlekey/sitekey, pageurl — верны.
Тело ответа При успехе — {"status":1,"request":"TASK_ID"}.
Код ответа 200 = OK, 403 = проблема с ключом, 429 = превышен лимит запросов.

Опрос результата (res.php)

Панель Что проверить
Тело запроса key, action=get, id=TASK_ID, json=1.
Тело ответа CAPCHA_NOT_READY во время обработки, {"status":1,"request":"TOKEN"} при успехе.
Тайминг Интервал между опросами — не меньше 5 секунд.

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

  • Пустой googlekey в теле запроса — не удалось извлечь sitekey на стороне клиента.
  • Ответ {"status":0,"request":"ERROR_WRONG_USER_KEY"} — API-ключ недействителен.
  • Ответ {"status":0,"request":"ERROR_ZERO_BALANCE"} — на балансе нет средств.
  • Ответ {"status":0,"request":"ERROR_NO_SLOT_AVAILABLE"} — сервер занят, повторите запрос позже.
  • Ответа нет вообще (тайм-аут) — сеть или прокси блокируют соединение.
  • Код 429 — слишком частые запросы, снизьте частоту опроса.

Повтор неудачных запросов без перезапуска приложения

Если запрос упал, его можно отправить заново прямо из Fiddler:

  1. Кликните правой кнопкой по неудачной сессии.
  2. Выберите ReplayReissue Requests.
  3. Тот же запрос уходит снова с идентичными заголовками и телом.

Чтобы повторить с изменениями: правая кнопка → Edit in ComposerExecute.

Анализ времени отклика

Вкладка Timeline в Fiddler показывает, на каком этапе уходит время:

Метрика Норма Признак проблемы
DNS-резолвинг < 50 мс > 500 мс — проблема с DNS
TCP-соединение < 100 мс > 1000 мс — проблема сети
TLS-рукопожатие < 200 мс > 1000 мс — проблема с сертификатом
Ответ сервера (in.php) < 500 мс > 2000 мс — перегрузка сервера
Ответ сервера (res.php) < 200 мс > 1000 мс — необычно, проверьте статус

Для команд из Европы и Центральной Азии TLS обычно выше секунды — дело в маршруте.

Типичные проблемы и их причины

Проблема Причина Решение
Fiddler не показывает трафик Код не идёт через прокси Fiddler Укажите прокси 127.0.0.1:8866 (Everywhere) или 8888 (Classic)
Ошибки SSL-сертификата Корневой сертификат Fiddler не помечен доверенным Переустановите сертификат Fiddler и добавьте его в доверенные корневые
Тело ответа выглядит как «кракозябры» Ответ сжат Включите кнопку «Decode» на панели инструментов (или Rules → Remove All Encodings)
Точка останова не срабатывает Не совпадает фильтр или правило Проверьте, что маска URL точно соответствует ocr.captchaai.com
Трафик есть, но тело запроса пустое Не совпадает Content-Length или ответ идёт потоком Откройте сессию и дождитесь полной загрузки ответа

Экспорт сессий для поддержки CaptchaAI

  1. Выделите нужные сессии в Fiddler.
  2. File → Export Sessions → Selected Sessions.
  3. Выберите формат HTTPArchive (.har).
  4. Удалите API-ключ из файла перед отправкой.
Find and replace your actual API key with "REDACTED" in the .har file

Частые вопросы

Замедляет ли Fiddler решение CAPTCHA?

Практически нет — прокси добавляет 1–5 мс, что несущественно на фоне времени решения (10–60 секунд). Учтите: время в Fiddler — момент получения данных, а не отправки запроса кодом.

Fiddler Classic или Fiddler Everywhere — что выбрать для отладки CaptchaAI?

Fiddler Everywhere кроссплатформенный. Fiddler Classic — только Windows, зато даёт больше возможностей через FiddlerScript. Для типовой отладки API разницы почти нет.

Почему Fiddler не видит трафик, хотя прокси вроде бы настроен?

Чаще всего код обращается к API мимо прокси-настроек или игнорирует системный прокси. Проверьте, что proxies/httpsAgent передаются в вызов.

Как передать дамп трафика в поддержку, не раскрыв API-ключ?

Экспортируйте сессии в .har и замените key= на REDACTED. Проверьте файл вручную — автозамена иногда пропускает повторные вхождения ключа.

Что читать дальше

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