
CLI-инструмент, оборачивающий curl для визуализации временных разбивок HTTP-запросов (DNS, TCP, TLS, обработка сервером) со структурированным выводом JSON и проверкой порогов SLO для диагностики производительности сети.

httpstat визуализирует статистику curl(1) красиво и наглядно.
Это однофайловый🌟 Python-скрипт, который не требует зависимостей👏 и совместим с Python 3🍻.
--format json / jsonl для машинной обработки со стабильной схемой v1--slo total=500,connect=100 завершается с кодом 4 при нарушении--save path.json для многошаговых процессовЕсть три способа получить httpstat:
wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.pypip install httpstatbrew install httpstatДля пользователей Windows рекомендуется Go-версия от @davecheney. → ссылка для загрузки
httpstat поставляется с навыком для агента, который обучает ИИ-ассистентов программирования (Claude Code, Cursor и др.) использовать httpstat для диагностики производительности HTTP — автоматическая установка, определение узких мест и предложения по исправлению.
Установите навык в свой проект:
npx skills add reorx/httpstat
После установки ваш агент будет автоматически использовать httpstat, когда вы задаёте вопросы вроде «почему этот API медленный?» или «отладить задержку этой конечной точки».
Просто:
python httpstat.py httpbin.org/get
Если установлено через pip или brew, вы можете использовать httpstat как команду:
httpstat httpbin.org/get
Поскольку httpstat является обёрткой над cURL, вы можете передавать любые поддерживаемые cURL опции после URL (кроме -w, -D, -o, -s, -S, которые уже используются httpstat):
httpstat httpbin.org/post -X POST --data-urlencode "a=b" -v
Используйте --format (-f) для получения машиночитаемого вывода:
httpstat httpbin.org/get --format json
{
"schema_version": 1,
"url": "httpbin.org/get",
"ok": true,
"exit_code": 0,
"response": {
"status_line": "HTTP/2 200",
"status_code": 200,
"remote_ip": "...",
"remote_port": "443",
"headers": {"Content-Type": "application/json", "Server": "nginx", "...": "..."}
},
"timings_ms": {
"dns": 5, "connect": 10, "tls": 15,
"server": 50, "transfer": 20, "total": 100,
"namelookup": 5, "initial_connect": 15,
"pretransfer": 30, "starttransfer": 80
},
"speed": { "download_kbs": 1234.5, "upload_kbs": 0.0 },
"slo": null
}
Используйте --format jsonl для компактного однострочного JSON (полезно для лог-конвейеров).
Проверка времени ответа на соответствие порогам. Завершается с кодом 4 при нарушении:
httpstat httpbin.org/get --slo total=500,connect=100,ttfb=200
Поддерживаемые ключи: total, connect, ttfb (время до первого байта), dns, tls.
В красивом режиме нарушения выводятся красным в конце вывода.
В режиме JSON нарушения отображаются в поле slo:
{
"slo": {
"pass": false,
"violations": [
{ "key": "total", "threshold_ms": 500, "actual_ms": 823 }
]
}
}
Запись структурированного вывода JSON в файл (работает с любым --format):
httpstat httpbin.org/get --save result.json
httpstat httpbin.org/get --format json --save result.json
httpstat имеет набор переменных окружения для управления поведением. Вот несколько примеров использования, также вы можете запустить httpstat --help для полного объяснения.
HTTPSTAT_SHOW_BODY
Установите true, чтобы показывать тело ответа в выводе; обратите внимание, что длина тела ограничена 1023 байтами, при превышении будет обрезано. По умолчанию false.
HTTPSTAT_SHOW_IP
По умолчанию httpstat показывает удалённый и локальный IP/порт. Установите false, чтобы отключить эту функцию. По умолчанию true.
HTTPSTAT_SHOW_SPEED
Установите true, чтобы показывать скорость загрузки и выгрузки. По умолчанию false.
HTTPSTAT_SHOW_SPEED=true httpstat http://cachefly.cachefly.net/10mb.test
...
speed_download: 3193.3 KiB/s, speed_upload: 0.0 KiB/s
HTTPSTAT_SAVE_BODY
Для удобства вы можете экспортировать эти переменные окружения в вашем .zshrc или .bashrc, пример:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
Вот несколько реализаций на разных языках:
Это Go-альтернатива httpstat, написана на чистом Go и не требует внешних программ. Выбирайте, если любите надёжные бинарные исполняемые файлы (я, честно говоря, тоже).
Go (библиотека): tcnksm/go-httpstat
Помимо CLI-инструмента, этот проект используется как библиотека для отладки задержки HTTP-запросов в коде Go; очень продуманно и полезно, подробнее в этой статье
Bash: b4b4r07/httpstat
Это именно то, что я хотел сделать в самом начале, но отказался из-за неуверенности в своём навыке bash; отличная работа!
Node: yosuke-furukawa/httpstat
b4b4r07 упомянул это в своей статье; также может использоваться как HTTP-клиент.
Реализация на PHP от @talhasch
Некоторые блоки кода в httpstat скопированы из других моих проектов, взгляните:
По умолчанию httpstat сохраняет тело во временный файл, установите false, чтобы отключить. По умолчанию true.
HTTPSTAT_CURL_BIN
Укажите путь к бинарному файлу cURL. По умолчанию используется curl из текущего $PATH оболочки.
Этот пример использует cURL, установленный через brew, для выполнения запроса HTTP2:
HTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2
HTTP/2 200
...
cURL должен быть скомпилирован с nghttp2 для включения функции http2 (#12).
HTTPSTAT_METRICS_ONLY
Если установлено true, httpstat будет выводить только метрики в формате json; это полезно, если вы хотите анализировать данные, а не читать их.
Примечание: Это сохранено для обратной совместимости. Рекомендуется использовать
--format json.
HTTPSTAT_DEBUG
Установите true для просмотра отладочных логов. По умолчанию false.
NO_COLOR
При установке (в любое значение) отключает весь цветной вывод. См. no-color.org для соглашения.
NO_COLOR=1 httpstat httpbin.org/get