
Strumento CLI che avvolge curl per visualizzare la suddivisione dei tempi delle richieste HTTP (DNS, TCP, TLS, elaborazione server) con output JSON strutturato e controllo delle soglie SLO per la diagnostica delle prestazioni di rete.

httpstat visualizza le statistiche di curl(1) in modo bello e chiaro.
È uno script Python a file unico🌟 che non ha dipendenze👏 ed è compatibile con Python 3🍻.
--format json / jsonl per il consumo da parte di macchine con uno schema stabile v1--slo total=500,connect=100 esce con codice 4 in caso di violazione--save path.json per flussi di lavoro a più passaggiCi sono tre modi per ottenere httpstat:
Scarica lo script direttamente: wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
Tramite pip: pip install httpstat
Tramite homebrew (solo macOS): brew install httpstat
Per utenti Windows, si consiglia la versione Go di @davecheney. → link di download
httpstat include una skill per agenti che insegna agli assistenti di codifica AI (Claude Code, Cursor, ecc.) come usare httpstat per la diagnostica delle prestazioni HTTP — installazione automatica, identificazione dei colli di bottiglia e suggerimenti di correzione attuabili.
Installa la skill nel tuo progetto:
npx skills add reorx/httpstat
Una volta installata, il tuo agente userà automaticamente httpstat quando fai domande come "perché questa API è lenta?" o "diagnostica la latenza di questo endpoint".
Semplicemente:
python httpstat.py httpbin.org/get
Se installato tramite pip o brew, puoi usare httpstat come comando:
httpstat httpbin.org/get
Poiché httpstat è un wrapper di cURL, puoi passare qualsiasi opzione supportata da cURL dopo l'url (tranne -w, -D, -o, -s, -S già usate da httpstat):
httpstat httpbin.org/post -X POST --data-urlencode "a=b" -v
Usa --format (-f) per ottenere output leggibile da macchina:
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
}
Usa --format jsonl per JSON compatto su singola riga (utile per pipeline di log).
Controlla i tempi di risposta rispetto alle soglie. Esce con codice 4 in caso di violazione:
httpstat httpbin.org/get --slo total=500,connect=100,ttfb=200
Chiavi supportate: total, connect, ttfb (time to first byte), dns, tls.
In modalità formattata, le violazioni vengono stampate in rosso alla fine dell'output.
In modalità JSON, le violazioni appaiono nel campo slo:
{
"slo": {
"pass": false,
"violations": [
{ "key": "total", "threshold_ms": 500, "actual_ms": 823 }
]
}
}
Scrive l'output JSON strutturato su un file (funziona con qualsiasi --format):
httpstat httpbin.org/get --save result.json
httpstat httpbin.org/get --format json --save result.json
httpstat ha una serie di variabili d'ambiente per controllarne il comportamento.
Ecco alcuni esempi d'uso, puoi anche eseguire httpstat --help per vedere la spiegazione completa.
HTTPSTAT_SHOW_BODY
Imposta a true per mostrare il corpo della risposta nell'output, nota che la lunghezza del corpo è limitata a 1023 byte, verrà troncato se supera. Il valore predefinito è false.
HTTPSTAT_SHOW_IP
Per impostazione predefinita httpstat mostra l'indirizzo IP/porta remoto e locale.
Imposta a false per disabilitare questa funzione. Il valore predefinito è true.
HTTPSTAT_SHOW_SPEED
Imposta a true per mostrare la velocità di download e upload. Il valore predefinito è 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
Per comodità, puoi esportare queste variabili d'ambiente nel tuo .zshrc o .bashrc,
esempio:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
Ecco alcune implementazioni in vari linguaggi:
Questa è l'alternativa Go di httpstat, è scritta in Go puro e non dipende da programmi esterni. Sceglila se ti piacciono le esecuzioni binarie solide (in realtà è così).
Go (libreria): tcnksm/go-httpstat
Oltre ad essere uno strumento da riga di comando, questo progetto è usato come libreria per aiutare a diagnosticare la latenza delle richieste HTTP in codice Go, molto pensato e utile, vedi di più in questo articolo
Bash: b4b4r07/httpstat
Questo è esattamente ciò che volevo fare all'inizio, ma ho rinunciato per non essere sicuro delle mie capacità in bash, buon lavoro!
Node: yosuke-furukawa/httpstat
b4b4r07 lo ha menzionato nel suo articolo, potrebbe essere usato anche come client HTTP.
L'implementazione PHP di @talhasch
Alcuni blocchi di codice in httpstat sono copiati da altri miei progetti, dai un'occhiata:
reorx/python-terminal-color Libreria a file unico per stampare colori nel terminale.
reorx/getenv Definizione di variabili d'ambiente con tipo.
Per impostazione predefinita httpstat memorizza il corpo in un file temporaneo,
imposta a false per disabilitare questa funzione. Il valore predefinito è true
HTTPSTAT_CURL_BIN
Indica il percorso del binario cURL da usare. Il valore predefinito è curl dal $PATH della shell corrente.
Questo esempio usa cURL installato tramite brew per effettuare richieste HTTP2:
HTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2
HTTP/2 200
...
cURL deve essere compilato con nghttp2 per abilitare la funzionalità http2 (#12).
HTTPSTAT_METRICS_ONLY
Se impostato a true, httpstat restituirà solo le metriche in formato json,
questo è utile se vuoi analizzare i dati invece di leggerli.
Nota: Questo è mantenuto per compatibilità all'indietro. Preferisci
--format json.
HTTPSTAT_DEBUG
Imposta a true per vedere i log di debug. Il valore predefinito è false
NO_COLOR
Quando impostata (a qualsiasi valore), disabilita tutto l'output colorato. Vedi no-color.org per la convenzione.
NO_COLOR=1 httpstat httpbin.org/get