TGViewer
Сергей Озеранский Сергей Озеранский @sergeiozeranskii · 2.35K subscribers
Post #311 3.2K
Решал конкретно свою задачу и в итоге решил, что это можно выкатить в опенсорс.

Мне нужно было задебажить запросы к удаленному API по перформансу - не просто увидеть "запрос занял 800 мс", а получить реальную картину: какие этапы есть у запроса, сколько времени тратится на каждый шаг (DNS, коннект, TLS, ожидание ответа и т д), что именно тормозит. Так и появился httptap.

🔗 Репозиторий: https://github.com/ozeranskii/httptap

Пока не опубликован в PyPI - профукал учетку, пытаюсь восстановить. Если не получится, сделаю новую 🤦‍♂️

PyPi - https://pypi.org/project/httptap/

Почему не httpstat

Когда искал готовые решения, нашел два инструмента:
- https://github.com/reorx/httpstat (Python)
- https://github.com/davecheney/httpstat (Go)

И вот какие там ограничения.

httpstat (Python):
- это по сути обертка над curl - без curl не работает
- проект давно не развивается
- по набору фичей тоже получается бедней, чем у меня

httpstat (Go):
- нативная реализация без curl. Удобно
- но это скорее удобный curl -v с подсветкой
- нет глубокого TLS аудита
- нет JSON экспорта для автоматизации и регрессионных проверок

Короче, ни одно решение не закрывало мои сценарии полностью, плюс захотел свое ,как мне кажется, более интересное.

Что делает httptap по другому

🎯 Чистая Python экосистема
- без внешнего curl и системных зависимостей
- минимум зависимостей: httpx, dnspython, rich
- работает на macOS, Linux, Windows
- можно использовать как CLI и можно использовать как библиотеку внутри питоновского кода

📊 Продвинутый трейсинг
- точные замеры через httpcore trace hooks, а не парсинг вывода curl
- полная цепочка редиректов с таймингами на каждом хопе
- честно помечает метрики как is_estimated, если где то пришлось сделать фолбек
- это не просто "запрос занял N мс", это поэтапный waterfall

🔒 Глубокая TLS инспекция
- версия протокола и cipher suite
- common name сертификата
- сколько дней осталось до истечения (cert_days_left)
- отдельный TLS probe чтобы это измерить и показать отдельно

🌐 Работа с сетью
- определяет IPv4/IPv6
- показывает какой IP был на каждом шаге редиректа

💾 Удобные форматы вывода
- rich waterfall - человекочитаемая табличка с этапами
- compact - однострочник для логов
- metrics-only - только цифры, чтобы парсить в скриптах или в CI
- полный JSON экспорт со всеми метаданными по каждому шагу, включая тайминги DNS/TCP/TLS/TTFB/Transfer, хедеры, сертификаты, summary
- максирование чувствительных заголовков при экспорте в JSON

🔧 Расширяемость
- четкие интерфейсы для DNS резолвера, TLS инспектора, визуализации
- можно подменить компонент и встроить httptap в свою отладку
- это не тупо консолька, это реально пригодно как часть пайплайна

Как это устроено внутри

В отличие от httpstat (python), который полагается на curl, httptap делает все сам внутри Python:
- использует httpx/httpcore и низкоуровневые trace hooks, то есть мы реально видим поведение клиента на уровне сокетов
- лезет в TLS руками и вытаскивает параметры шифрования и сертификат
- полностью контролирует измерения, а не просто печатает чужую статистику

Для чего это вообще
- performance troubleshooting - где именно тормозит API
- regression analysis - сравнение базовой метрики и текущей
- tls audit - что там с сертификатом и шифром
- network diagnostics - DNS, IPv4 vs IPv6, латентность соединения
- redirect chain analysis - как реально ходит запрос до финальной точки

Если вы отлаживаете API и вам нужно не просто "оно отвечает медленно", а понять почему - забирайте, пишите фидбек и контрибутьте. 🚀
GitHub GitHub - ozeranskii/httptap: Rich-powered CLI that breaks each HTTP request into DNS, connect, TLS, wait, and transfer phases with… Rich-powered CLI that breaks each HTTP request into DNS, connect, TLS, wait, and transfer phases with waterfall timelines, compact summaries, or metrics-only output. - ozeranskii/httptap
  • ❤‍🔥 26
  • 🔥 24
  • ❤ 10
  • 👍 8
  • ⚡ 1
More from @sergeiozeranskii
  1. Sep 24, 2026Обнаружил, что агенты Claude Code в разных сессиях умеют общаться между собой. У меня сейч…
  2. Sep 23, 2026Возьмем Python-сервис в Kubernetes. Как правило на старте контейнера может проявляться спа…
  3. Sep 23, 2026Сегодня случилось страшное. То, чего я никак не ожидал. За все годы на MacBook со мной так…
  4. Sep 17, 2026Я вот не понимаю, зачем люди идут в OSS и контрибьютят на отвали. Ценности в этом ноль для…
  5. Sep 17, 2026Помните про https://github.com/ozeranskii/httptap? Я писал о нем давно еще - > тут. Наклеп…
  6. Sep 17, 2026Поломали или у меня поломалось? Как у вас?
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →