Перехват и просмотр трафика

Пока перехват включён, записывается каждый прошедший через прокси запрос: сам запрос и ответ, их заголовки и тела, статус, тайминг и TLS-сертификат сервера.

Перехваченные запросы группируются по хостам, по приложениям, из которых они пришли, и по устройствам — так трафик одной программы или одного телефона можно смотреть отдельно. Нужные хосты можно закрепить, а те, которые не нужно расшифровывать, — отправить в список исключений прямо из перехваченного запроса.

Очистка сессии удаляет всё записанное. Остановка перехвата запись не стирает.

Как сузить выборку

Работают два механизма:

  • текстовый поиск по перехваченным запросам;
  • фильтр из правил, объединённых через AND (должны совпасть все) или OR (достаточно одного).

Правило фильтра срабатывает по URL, пути, методу, схеме или статусу. Для URL и пути доступны равенство, вхождение, начало, окончание и регулярное выражение; для статуса — класс кода (2xx, 3xx, 4xx, 5xx), точный код, диапазон или состояние запросов, у которых кода нет вовсе: ещё выполняется, ошибка, пропущен без расшифровки. Количество правил в фильтре ограничено, а отдельные правила можно выключать, не удаляя.

Что видно по одному запросу

  • Заголовки запроса и ответа.
  • Тело — в виде, подходящем типу содержимого: JSON как сворачиваемое дерево, HTML отрисованным, изображения с размерами, multipart/form-data полями с превью для файлов, двоичные данные как hex. По текстовым телам работает поиск.
  • Авторизация, обнаруженная в запросе: схема, заголовок, из которого она взята, и декодированный токен.
  • Исходное HTTP-сообщение — таким, каким оно ушло в сеть.
  • Сводка — хост, путь, схема, версия HTTP, приложение-источник, статус, длительность, размеры тел, временные метки и TLS-сертификат сервера (субъект, издатель, срок действия, серийный номер, отпечаток, SANs).

Слишком большие тела в просмотрщик не загружаются — их можно сохранить в файл.

Потоки

Ответ с Content-Type: text/event-stream передаётся клиенту в реальном времени, а его события записываются по мере поступления. WebSocket-соединения записываются кадр за кадром: направление, тип кадра, размер и данные; двоичные данные показываются как hex, текстовые форматируются, если разбираются как JSON.

Для обоих есть пределы: 1000 записей на запрос и до 64 КиБ на один кадр WebSocket.

Если событие в потоке есть, а до страницы не доходит, вставьте сырой ответ в парсер SSE: он покажет, что из него прочитает браузер и что молча отбросит.

У странного поведения стримов есть свои разборы: SSE приходит одним куском, стрим обрывается через 60 секунд, ромбики вместо текста в стриме, лимит шести соединений и WebSocket closed with code 1006.

Тайминг

Время измеряется по фазам, поэтому медленный запрос можно разложить: чтение тела запроса, сопоставление с правилами локальной подмены, заданная в правиле задержка, время на брейкпоинте, установка соединения с сервером, ожидание ответа, чтение тела ответа и время приостановки ответа до передачи клиенту. Также записывается, было соединение новым или переиспользованным.

Ошибки

Запрос, не получивший ответа, записывается с причиной: не разрешился DNS, сервер отклонил TLS-соединение прокси, не удался TLS-handshake с клиентом, соединение отклонено, сброшено или истёк таймаут, клиент закрыл соединение первым, не завершился апгрейд до WebSocket. Рядом с объяснением сохраняется исходная ошибка.

Если вместо тела показано зашифрованное содержимое, значит сертификат не установлен или ему не доверяют на стороне клиента — см. Установка сертификата.

Как выгрузить данные

Отдельный запрос можно скопировать или сохранить: заголовки, тело или исходное HTTP-сообщение.

Как записать HAR-файл

Браузер записывает HAR только для одной вкладки. Solpuga записывает его для всего, что идёт через прокси: мобильного приложения, десктопной программы, скрипта или нескольких браузеров сразу.

  1. Включите перехват и воспроизведите проблему. Чтобы тела HTTPS-запросов читались, нужен установленный сертификат. Телефон подключается по инструкции Мобильные устройства.
  2. В меню Инструменты выберите Экспорт сессии как HAR… (Cmd/Ctrl + Shift + E) или нажмите кнопку загрузки в заголовке окна, рядом с очисткой.
  3. Сохраните файл.

В файл попадает вся сессия в формате HAR 1.2. Он открывается в Chrome DevTools, Charles, Fiddler, Insomnia и Postman, а без установки программ — в просмотрщике HAR прямо в браузере. Пока ничего не перехвачено, экспорт недоступен.

Нужен HAR одной вкладки браузера? Его сохраняют инструменты разработчика: как записать HAR-файл в Яндекс Браузере, Chrome, Firefox и Safari.

Что окажется в файле:

  • незавершённые запросы не попадают, неудачные экспортируются со статусом 0;
  • тела сохраняются расшифрованными и распакованными, а заголовки ответа — такими, как пришли, поэтому некоторые импортёры пытаются распаковать содержимое второй раз;
  • двоичные тела ответов кодируются в base64, двоичные тела запросов не экспортируются и помечаются комментарием.

Как открыть HAR-файл

Файл .har из браузера или другого прокси открывается в меню Инструменты, пункт Импорт сессии из HAR… (Cmd/Ctrl + Shift + I). Второй способ: открыть его через приложение из файлового менеджера.

Он открывается в отдельном окне только для чтения, со своим списком и инспектором, поэтому живой перехват не затрагивается. Тела и исходные сообщения из него можно сохранять в файлы. Файлы больше 500 МБ не принимаются.