
Outil en ligne de commande qui enveloppe curl pour visualiser la décomposition des temps de requête HTTP (DNS, TCP, TLS, traitement serveur) avec une sortie JSON structurée et une vérification des seuils SLO pour les diagnostics de performance réseau.

httpstat visualise les statistiques de curl(1) de manière élégante et claire.
C'est un script Python d'un seul fichier🌟 qui n'a aucune dépendance👏 et est compatible avec Python 3🍻.
--format json / jsonl pour une consommation machine avec un schéma v1 stable--slo total=500,connect=100 se termine avec le code 4 en cas de violation--save path.json pour des workflows multi-étapesIl existe trois façons d'obtenir httpstat :
Téléchargez le script directement : wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
Via pip : pip install httpstat
Via homebrew (macOS uniquement) : brew install httpstat
Pour les utilisateurs Windows, la version Go de @davecheney est suggérée. → lien de téléchargement
httpstat est livré avec une compétence agent qui apprend aux assistants de codage IA (Claude Code, Cursor, etc.) à utiliser httpstat pour les diagnostics de performance HTTP — installation automatique, identification des goulots d'étranglement et suggestions de correctifs actionnables.
Installez la compétence dans votre projet :
npx skills add reorx/httpstat
Une fois installée, votre agent utilisera automatiquement httpstat lorsque vous poserez des questions comme "pourquoi cette API est-elle lente ?" ou "déboguer la latence de ce point de terminaison".
Simplement :
python httpstat.py httpbin.org/get
Si installé via pip ou brew, vous pouvez utiliser httpstat comme commande :
httpstat httpbin.org/get
Parce que httpstat est un wrapper de cURL, vous pouvez passer toute option cURL prise en charge après l'URL (sauf -w, -D, -o, -s, -S qui sont déjà utilisées par httpstat) :
httpstat httpbin.org/post -X POST --data-urlencode "a=b" -v
Utilisez --format (-f) pour obtenir une sortie lisible par machine :
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
}
Utilisez --format jsonl pour un JSON compact sur une seule ligne (utile pour les pipelines de logs).
Vérifiez les temps de réponse par rapport aux seuils. Se termine avec le code 4 en cas de violation :
httpstat httpbin.org/get --slo total=500,connect=100,ttfb=200
Clés supportées : total, connect, ttfb (time to first byte), dns, tls.
En mode joli, les violations sont affichées en rouge à la fin de la sortie.
En mode JSON, les violations apparaissent dans le champ slo :
{
"slo": {
"pass": false,
"violations": [
{ "key": "total", "threshold_ms": 500, "actual_ms": 823 }
]
}
}
Écrivez la sortie JSON structurée dans un fichier (fonctionne avec n'importe quel --format) :
httpstat httpbin.org/get --save result.json
httpstat httpbin.org/get --format json --save result.json
httpstat possède un ensemble de variables d'environnement pour contrôler son comportement.
Voici quelques démonstrations d'utilisation, vous pouvez aussi exécuter httpstat --help pour voir l'explication complète.
HTTPSTAT_SHOW_BODY
Définissez à true pour afficher le corps de la réponse dans la sortie, notez que la longueur du corps est limitée à 1023 octets, sera tronquée si dépassée. Par défaut false.
HTTPSTAT_SHOW_IP
Par défaut, httpstat affiche les adresses IP/port distantes et locales.
Définissez à false pour désactiver cette fonctionnalité. Par défaut true.
HTTPSTAT_SHOW_SPEED
Définissez à true pour afficher la vitesse de téléchargement et d'upload. Par défaut 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
Pour plus de commodité, vous pouvez exporter ces variables dans votre .zshrc ou .bashrc,
exemple :
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
Voici quelques implémentations dans divers langages :
C'est l'alternative Go de httpstat, elle est écrite en Go pur et ne dépend d'aucun programme externe. Choisissez-la si vous aimez les exécutions binaires solides (c'est mon cas).
Go (library): tcnksm/go-httpstat
En plus d'être un outil en ligne de commande, ce projet est utilisé comme bibliothèque pour aider à déboguer la latence des requêtes HTTP dans le code Go, très réfléchi et utile, voir plus dans cet article
Bash: b4b4r07/httpstat
C'est exactement ce que je voulais faire au début, mais j'ai abandonné par manque de confiance dans mes compétences en bash, bon travail !
Node: yosuke-furukawa/httpstat
b4b4r07 l'a mentionné dans son article, pourrait également être utilisé comme client HTTP.
L'implémentation PHP par @talhasch
Quelques blocs de code dans httpstat sont copiés d'autres de mes projets, jetez un œil :
reorx/python-terminal-color Bibliothèque mono-fichier enfichable pour l'impression de couleur dans le terminal.
reorx/getenv Définition de variable d'environnement avec type.
Par défaut, httpstat stocke le corps dans un fichier temporaire,
définissez à false pour désactiver cette fonctionnalité. Par défaut true
HTTPSTAT_CURL_BIN
Indiquez le chemin du binaire cURL à utiliser. Par défaut curl depuis votre $PATH shell actuel.
Cet exemple utilise cURL installé via brew pour faire une requête HTTP2 :
HTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2
HTTP/2 200
...
cURL doit être compilé avec nghttp2 pour activer la fonctionnalité http2 (#12).
HTTPSTAT_METRICS_ONLY
Si défini à true, httpstat n'affichera que les métriques au format json,
ceci est utile si vous voulez analyser les données au lieu de les lire.
Note: Ceci est conservé pour la compatibilité ascendante. Préférez
--format jsonà la place.
HTTPSTAT_DEBUG
Définissez à true pour voir les logs de débogage. Par défaut false
NO_COLOR
Lorsqu'elle est définie (à n'importe quelle valeur), désactive toute sortie colorée. Voir no-color.org pour la convention.
NO_COLOR=1 httpstat httpbin.org/get