Traffic

Traffic — модальное окно HTTP-трафика. Открывается кнопкой traffic на странице ZP7, ссылкой /?page=zp7#traffic и хоткеем Alt+5.

Узлы и локальный рантайм пишут трафик в файл, а окно читает его хвост — так же, как allLogs читает логи.

Источники

Окно опрашивает сразу два вида источников и складывает записи в один список:

Источник Кто пишет Файл Чтение
z3nDash ZpRuntime (Rqst, HttpDebugHandler) <logsFolder>/trafficLog.jsonl GET /traffic
ZP-узел z3n7 (Rqst) <каталог логов ZennoPoster>/trafficLog.jsonl GET /zp/traffic?machine=...

Адреса узлов берутся из GET /zp/nodes?probe=false. Недоступный узел не мешает остальным: его ошибка показывается строкой над списком, а записи доступных источников выводятся как обычно.

Файл на каждой стороне один на машину, пишется под именованным мьютексом и ротируется на 50 МБ с хранением пяти последних файлов. Чтение идёт с конца: запрашивается последних N записей, при нехватке текущего файла добираются ротированные. Потолок сканирования — 64 МБ; если он исчерпан, ответ помечается truncated.

Список

Фильтры: машина, проект, метод, статус, подстрока URL, число записей на источник. Проект уходит в запрос и фильтруется при чтении файла, остальные фильтры применяются к загруженным записям. Обновление раз в 3 секунды при открытом окне, кнопка Auto его останавливает. Clear view сбрасывает буфер окна — сами файлы не трогаются, чистки трафика нет ни у узла, ни у рантайма.

Детали

Панель показывает URL, метод, статус, длительность, машину, проект, аккаунт, сессию, прокси и task_id, а также сворачиваемые секции Request и Response с заголовками, cookie и телом. Клик по значению копирует его.

Replay

Play открывает запрос в редакторе: метод, URL, заголовки и тело можно изменить перед отправкой. Запрос уходит через отдельный replay listener — POST /http-replay, тот же, что использует HAR. Ответ доступен для копирования, рядом есть кнопка cURL по текущему содержимому полей.

Порт listener — всегда порт панели + 1, и на сервере, и на фронте; настройки у него нет. Слушает он только localhost.

Код

Для выбранной записи формируются готовые вызовы: HttpClient, ZP7, Hybrid, Python, TypeScript, cURL. API Skeleton и API Example сводят все показанные запросы в описание эндпоинтов — типы полей либо последние реальные значения.

cURL Import разбирает вставленную команду curl и открывает её в панели деталей как обычную запись: её можно проиграть и сконвертировать, в списке она не появляется.

Формат записи

{
  "timestamp": "2026-09-12 17:40:11.325",
  "startedDateTime": "2026-09-12T22:40:11.1000000Z",
  "method": "POST",
  "url": "https://example.com/api",
  "statusCode": 200,
  "durationMs": 214,
  "proxy": "",
  "request":  { "headers": [], "contentType": "", "userAgent": "", "cookies": "", "cookiesSource": "", "body": "" },
  "response": { "headers": "", "body": "" },
  "machine": "PC", "project": "", "account": "", "session": "",
  "task_id": "", "source": "z3n7"
}

Формат общий для узла и рантайма, поэтому окно разбирает оба источника одним кодом.

API

  • GET /traffic?tail=N&project=&task_id= — локальный файл z3nDash;
  • GET /zp/traffic?machine=&tail=N&project=&task_id= — проброс к узлу;
  • GET /zp/nodes?probe=false — список узлов;
  • POST /http-replay — повтор запроса (порт панели + 1).

Требование к узлу

Хвост файла отдаёт параметр tail в GET /traffic на стороне z3n7. Если узел возвращает первые N записей вместо последних, значит на нём сборка z3n7.dll без поддержки tail.