Запрос к 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:
- Откройте «Настройки» — HTTPS.
- Включите «Захват HTTPS-трафика».
- Установите корневой сертификат Fiddler при появлении соответствующего запроса.
- Доверяйте сертификату в хранилище сертификатов вашей ОС.
Fiddler Classic (Windows):
- Инструменты → Параметры → HTTPS.
- Установите флажок «Расшифровать HTTPS-трафик».
- Нажмите «Действия» → «Доверительный корневой сертификат».
Шаг 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
- Откройте вкладку Filters.
- Добавьте правило: Host →
contains→ocr.captchaai.com. - Примените фильтр.
Фильтры в Fiddler Classic
- Откройте вкладку Filters.
- Установите флажок «Use Filters».
- В разделе «Hosts» выберите «Show only the following Hosts».
- Введите:
ocr.captchaai.com.
В списке сессий остаются только запросы к API CaptchaAI.
Точки останова: правка запроса на лету
Точки останова приостанавливают запрос перед отправкой и дают его изменить.
Установка точки останова
Fiddler Everywhere:
- Rules → Add Rule.
- Условие: URL содержит
ocr.captchaai.com/in.php. - Действие: «Pause before sending».
Fiddler Classic:
- Rules → Automatic Breakpoints → Before Requests.
- Или введите
bpu ocr.captchaai.comв панели QuickExec.
Что делать, пока запрос на паузе
- Проверьте тело запроса — все параметры на месте.
- Измените параметр —
method,googlekeyилиpageurl. - Отпустите запрос — «Run to Completion» отправляет изменённую версию.
- Посмотрите ответ — исчезла ли проблема.
Что проверять в запросе и ответе
Отправка задачи (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:
- Кликните правой кнопкой по неудачной сессии.
- Выберите Replay → Reissue Requests.
- Тот же запрос уходит снова с идентичными заголовками и телом.
Чтобы повторить с изменениями: правая кнопка → Edit in Composer → Execute.
Анализ времени отклика
Вкладка 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
- Выделите нужные сессии в Fiddler.
- File → Export Sessions → Selected Sessions.
- Выберите формат HTTPArchive (.har).
- Удалите 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. Проверьте файл вручную — автозамена иногда пропускает повторные вхождения ключа.