
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.py
pip를 통해: pip install httpstat
homebrew를 통해 (macOS 전용): brew install httpstat
httpstat는 AI 코딩 도우미(Claude Code, Cursor 등)가 httpstat를 사용하여 HTTP 성능 진단(자동 설치, 병목 식별, 실행 가능한 수정 제안)을 수행하는 방법을 가르치는 에이전트 스킬을 제공합니다.
프로젝트에 스킬을 설치하세요:
npx skills add reorx/httpstat
설치가 완료되면 "이 API가 왜 느린가요?" 또는 "이 엔드포인트의 지연 시간을 디버깅해 주세요"와 같은 질문을 할 때 에이전트가 자동으로 httpstat를 사용합니다.
간단히:
python httpstat.py httpbin.org/get
pip 또는 brew를 통해 설치했다면, httpstat를 명령어로 사용할 수 있습니다:
httpstat httpbin.org/get
httpstat는 cURL의 래퍼이므로, URL 뒤에 cURL이 지원하는 모든 옵션을 전달할 수 있습니다(-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
기본적으로 httpstat는 본문을 임시 파일에 저장합니다.
false로 설정하면 이 기능을 비활성화할 수 있습니다. 기본값은 입니다.
편의를 위해 이러한 환경 변수를 .zshrc 또는 .bashrc에 내보낼 수 있습니다.
예:
export HTTPSTAT_SHOW_IP=false
export HTTPSTAT_SHOW_SPEED=true
export HTTPSTAT_SAVE_BODY=false
다음은 여러 언어로 구현된 예시입니다:
httpstat의 Go 대안입니다. 순수 Go로 작성되었으며 외부 프로그램에 의존하지 않습니다. 단단한 바이너리 실행을 선호한다면 이를 선택하세요(사실 저도 그렇습니다).
Go (라이브러리): tcnksm/go-httpstat
CLI 도구로서뿐만 아니라 Go 코드에서 HTTP 요청 지연 시간을 디버깅하는 데 라이브러리로 사용됩니다. 매우 세심하고 유용합니다. 자세한 내용은 이 기사를 참조하세요.
Bash: b4b4r07/httpstat
이것은 처음에 제가 정확히 하고 싶었던 것이지만, bash 실력에 자신이 없어서 포기했습니다. 잘 하셨습니다!
Node: yosuke-furukawa/httpstat
@talhasch의 PHP 구현
httpstat의 일부 코드 블록은 제 다른 프로젝트에서 복사되었습니다. 다음을 참조하세요:
reorx/python-terminal-color 터미널 색상을 출력하기 위한 단일 파일 라이브러리.
reorx/getenv 타입이 있는 환경 변수 정의.
trueHTTPSTAT_CURL_BIN
사용할 cURL 바이너리 경로를 지정합니다. 기본값은 현재 셸 $PATH에 있는 curl입니다.
다음 예시는 brew로 설치한 cURL을 사용하여 HTTP2 요청을 만듭니다:
HTTPSTAT_CURL_BIN=/usr/local/Cellar/curl/7.50.3/bin/curl httpstat https://http2.akamai.com/ --http2
HTTP/2 200
...
cURL은 http2 기능을 사용하려면 nghttp2로 컴파일되어야 합니다 (#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