
Ferramenta CLI que envolve o curl para visualizar as divisões de tempo de requisições HTTP (DNS, TCP, TLS, processamento do servidor) com saída JSON estruturada e verificação de limites SLO para diagnósticos de desempenho de rede.

httpstat visualiza as estatísticas do curl(1) de forma bela e clara.
É um script Python em um único arquivo🌟 que não tem dependências👏 e é compatível com Python 3🍻.
--format json / jsonl para consumo por máquina com um esquema v1 estável--slo total=500,connect=100 sai com código 4 em caso de violação--save caminho.json para fluxos de trabalho em várias etapasHá três maneiras de obter o httpstat:
Baixe o script diretamente: wget https://raw.githubusercontent.com/reorx/httpstat/master/httpstat.py
Através do pip: pip install httpstat
Através do homebrew (apenas macOS): brew install httpstat
Para usuários Windows, a versão em Go de @davecheney é sugerida. → link para download
O httpstat vem com uma skill de agente que ensina assistentes de codificação de IA (Claude Code, Cursor, etc.) a usar o httpstat para diagnóstico de desempenho HTTP — instalação automática, identificação de gargalos e sugestões de correção acionáveis.
Instale a skill no seu projeto:
npx skills add reorx/httpstat
Uma vez instalada, seu agente usará automaticamente o httpstat quando você fizer perguntas como "por que essa API está lenta?" ou "depure a latência deste endpoint".
Simplesmente:
python httpstat.py httpbin.org/get
Se instalado via pip ou brew, você pode usar httpstat como comando:
httpstat httpbin.org/get
Como httpstat é um wrapper do cURL, você pode passar qualquer opção suportada pelo cURL após a url (exceto -w, -D, -o, -s, -S que já são usadas pelo httpstat):
httpstat httpbin.org/post -X POST --data-urlencode "a=b" -v
Use --format (-f) para obter uma saída legível por máquina:
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
}
Use --format jsonl para JSON compacto de linha única (útil para pipelines de log).
Verifique os tempos de resposta contra limites. Sai com código 4 em caso de violação:
httpstat httpbin.org/get --slo total=500,connect=100,ttfb=200
Chaves suportadas: total, connect, ttfb (tempo até o primeiro byte), dns, tls.
No modo pretty, as violações são exibidas em vermelho no final da saída.
No modo JSON, as violações aparecem no campo slo:
{
"slo": {
"pass": false,
"violations": [
{ "key": "total", "threshold_ms": 500, "actual_ms": 823 }
]
}
}
Escreva a saída JSON estruturada em um arquivo (funciona com qualquer --format):
httpstat httpbin.org/get --save result.json
httpstat httpbin.org/get --format json --save result.json
O httpstat tem várias variáveis de ambiente para controlar seu comportamento. Aqui estão alguns exemplos de uso, você também pode executar httpstat --help para ver a explicação completa.
HTTPSTAT_SHOW_BODY
Defina como true para mostrar o corpo da resposta na saída; observe que o comprimento do corpo é limitado a 1023 bytes, será truncado se exceder. O padrão é false.
HTTPSTAT_SHOW_IP
Por padrão, o httpstat mostra os endereços IP/porta remoto e local. Defina como false para desabilitar esse recurso. O padrão é true.
HTTPSTAT_SHOW_SPEED
Defina como true para mostrar a velocidade de download e upload. O padrão é 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
Para conveniência, você pode exportar essas variáveis no seu .zshrc ou .bashrc, exemplo:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
Aqui estão algumas implementações em várias linguagens:
Esta é a alternativa em Go do httpstat, é escrita em Go puro e não depende de programas externos. Escolha-a se você gosta de execuções binárias sólidas (na verdade, eu gosto).
Go (biblioteca): tcnksm/go-httpstat
Além de ser uma ferramenta de linha de comando, este projeto é usado como biblioteca para ajudar a depurar a latência de requisições HTTP em código Go, muito atencioso e útil, veja mais neste artigo
Bash: b4b4r07/httpstat
Isso é exatamente o que eu queria fazer no começo, mas desisti por não confiar na minha habilidade em bash, bom trabalho!
Node: yosuke-furukawa/httpstat
b4b4r07 mencionou isso em seu artigo, também pode ser usado como um cliente HTTP.
A implementação em PHP por @talhasch
Alguns blocos de código no httpstat são copiados de outros projetos meus, dê uma olhada:
reorx/python-terminal-color Biblioteca de substituição em um único arquivo para imprimir cores no terminal.
reorx/getenv Definição de variável de ambiente com tipo.
Por padrão, o httpstat armazena o corpo em um arquivo temporário; defina como false para desabilitar esse recurso. O padrão é true.
HTTPSTAT_CURL_BIN
Indique o caminho do binário cURL a ser usado. O padrão é curl do $PATH atual do shell.
Este exemplo usa o cURL instalado via brew para fazer uma requisição HTTP2:
HTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2
HTTP/2 200
...
O cURL deve ser compilado com nghttp2 para habilitar o recurso http2 (#12).
HTTPSTAT_METRICS_ONLY
Se definido como true, o httpstat exibirá apenas métricas no formato json; isso é útil se você quiser analisar os dados em vez de lê-los.
Nota: Isso é mantido para compatibilidade retroativa. Prefira
--format json.
HTTPSTAT_DEBUG
Defina como true para ver logs de depuração. O padrão é false.
NO_COLOR
Quando definido (para qualquer valor), desativa toda a saída colorida. Consulte no-color.org para a convenção.
NO_COLOR=1 httpstat httpbin.org/get