Httpie는 사람이 읽기 쉬운 구문과 색상 출력을 갖춘 콘솔 HTTP 클라이언트로, 명령줄에서 API를 테스트하도록 설계되었습니다. 이 도구는 직관적인 구문을 사용합니다: http GET https://api.example.com/users — 헤더와 요청 본문에 플래그를 지정할 필요가 없습니다. Httpie CLI Documentation (2026)에 따르면 이 유틸리티는 기본적으로 JSON, 세션, 인증, 플러그인을 지원합니다.
핵심 사항
Httpie(또는 HTTPie)는 cURL에 비해 HTTP 요청 전송을 단순화하는 Python으로 작성된 명령줄 유틸리티입니다. 주요 차이점은 자연어에 가까운 구문입니다: 인수는 공백으로 구분되고, 헤더는 콜론으로 지정되며, JSON 데이터는 따옴표를 이스케이프하지 않고 등호로 지정됩니다.
cURL에서 동일한 POST 요청에는 최소 3개의 플래그(-X, -H, -d)와 수동 JSON 이스케이프가 필요합니다. Httpie는 플래그 없이 세 단어로 동일한 작업을 수행하며 자동으로 Content-Type: application/json을 설정하고 출력을 강조합니다. 응답은 기본적으로 들여쓰기와 구문 강조로 형식화됩니다.
| 작업 | cURL | Httpie |
|---|---|---|
| GET 요청 | curl https://api.example.com | http GET https://api.example.com |
| POST JSON | curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' https://api.example.com | http POST https://api.example.com name=test |
| 헤더 | curl -H "Authorization: Bearer token123" https://api.example.com | http GET https://api.example.com Authorization:"Bearer token123" |
Httpie는 주요 매개변수에 플래그를 사용하지 않는 단일 명령줄 형식을 사용합니다. HTTP 메서드는 첫 번째 인수(GET, POST, PUT, DELETE, PATCH)로 지정되고 URL은 두 번째로 지정됩니다. 메서드를 생략하면 Httpie는 자동으로 GET(본문 없는 요청) 또는 POST(본문 포함)를 선택합니다.
Authorization:"Bearer token".name=John age=30.active:=true tags:=["dev","test"].avatar@~/photo.jpg.Httpie는 데이터 유형을 자동으로 결정합니다: key=value가 전달되면 본문이 JSON으로 전송됩니다. --raw로 원시 텍스트가 전달되면 일반 텍스트로 전송됩니다. form-data 형식은 -f 플래그로 활성화됩니다.
# JSON 데이터와 헤더가 있는 POST 요청
http POST https://api.example.com/users \
name="John Doe" \
email="john@example.com" \
role:="admin" \
Authorization:"Bearer test123"
# 강조 및 Pretty-print가 있는 응답
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": 42,
"name": "John Doe"
}
Httpie의 JSON 직렬화는 자동으로 작동합니다: key=value로 전달된 값은 JSON의 문자열 필드가 됩니다. 숫자와 불리언 값에는 key:=value를 사용합니다. 중첩 객체는 점 표기법으로 생성합니다: address.city=Moscow.
Httpie는 key@path 구문으로 파일과 데이터를 업로드하기 위한 multipart/form-data 형식을 지원합니다. 파일 내용을 요청의 원시 본문으로 보내려면 입력 리디렉션을 사용합니다: http POST example.com < file.json. 응답을 파일로 다운로드하려면 -d(download) 플래그를 사용합니다.
# 파일에서 JSON 보내기
http POST https://api.example.com/users < user.json
# multipart로 파일 업로드
http -f POST https://api.example.com/upload \
photo@~/photo.jpg \
description="Profile photo"
Httpie의 세션은 요청 간에 쿠키, 헤더, 인증 매개변수와 같은 상태를 유지합니다. 세션은 --session=name 플래그로 생성합니다. 세션 데이터는 ~/.httpie/sessions/ 폴더의 JSON 파일에 저장됩니다. :readonly 접미사가 있는 세션은 요청 후에 업데이트되지 않습니다.
먼저 자격 증명과 함께 /auth/login에 POST 요청을 보냅니다 — 서버가 세션 쿠키를 반환합니다. 동일한 세션 내의 보호된 엔드포인트에 대한 이후의 모든 요청은 저장된 쿠키를 자동으로 보내며, 이는 모바일 앱의 API를 테스트할 때 브라우저의 동작을 시뮬레이션합니다.
# 1단계: 인증
http --session=app-test POST https://api.example.com/auth/login \
username="dev" password="secret"
# 2단계: 저장된 세션 쿠키가 있는 요청
http --session=app-test GET https://api.example.com/users/me
Httpie는 플래그를 통해 모든 주요 인증 유형을 지원합니다: Basic Auth용 -a user:pass, Digest용 --auth-type=digest, Bearer Token용 --auth-type=bearer TOKEN. 사용자 지정 헤더는 HeaderName:value로 명령의 어느 위치에나 추가됩니다.
OAuth 2.0을 사용하는 API를 테스트하려면 Authorization 헤더를 통해 토큰을 전달합니다. Httpie는 코어 수준에서 토큰 수명 주기를 관리하지 않습니다 — 이는 외부 스크립트가 수행합니다. http --auth-type=bearer --auth="$TOKEN" GET https://api.example.com/resource 명령은 토큰이 있는 헤더를 명시적으로 지정하는 것과 같습니다.
Httpie는 종속성 없음(Python 제외)과 읽기 쉬운 출력 덕분에 CI/CD 파이프라인에 이상적입니다. 명령은 추가 파싱 없이 로그에서 쉽게 읽을 수 있습니다. 이 도구는 pip로 설치되며 Alpine, Ubuntu, Jenkins와 GitLab의 공식 CI 이미지를 포함한 모든 인기 Docker 이미지에서 사용할 수 있습니다. 이는 Httpie를 REST API와 마이크로서비스의 자동화된 테스트에 편리한 선택으로 만듭니다.
일반적인 시나리오는 애플리케이션 배포 후 API 상태를 확인하는 것입니다. Httpie는 health 엔드포인트에 요청을 보내고 응답이 예상과 다르면 0이 아닌 코드로 종료됩니다. --check-status 플래그는 상태 코드가 300 이상이면 자동으로 오류를 반환합니다.
# 배포 스크립트에서 health check
http --check-status GET https://api.staging.example.com/health
status:="ok" && \
echo "API가 정상입니다" || \
echo "API 확인 실패"
Httpie는 Package Index 시스템을 통해 플러그인을 지원합니다. 플러그인은 새 인증 유형, 직렬화 형식, 전송을 추가합니다. 설치 방법은 pip입니다: pip install httpie-plugin-name. 설치 후 플러그인은 다음 Httpie 실행 시 자동으로 활성화됩니다.
Httpie는 --pretty=format 옵션을 통한 jq 유사 필터링과 --print를 통한 cURL 호환 출력을 지원합니다. --quiet 플래그는 CI 로그에서 가독성을 높이기 위해 색상 출력을 비활성화합니다. 응답을 프로그래밍 방식으로 처리하려면 --body 플래그를 사용하세요. 이 플래그는 헤더 없이 응답 본문만 출력합니다.
# jq로 JSON 응답에서 필드 추출
http GET https://api.example.com/users/1 | jq '.name'
# 응답 본문만 출력(헤더 없음)
http --body GET https://api.example.com/health
# 파일에서 다른 데이터로 일괄 전송
while read -r line; do
http POST https://api.example.com/items $line
done < items.txt
Httpie는 --print 플래그를 통해 출력 형식을 지원합니다: H(요청 헤더), B(요청 본문), h(응답 헤더), b(응답 본문). --print=hb 조합은 응답 헤더와 본문만 출력합니다. --pretty=all 플래그는 들여쓰기가 있는 색상 형식을 활성화합니다.
Httpie는 HTTPIE_COLORS 변수를 통한 사용자 지정을 지원합니다. URL, 헤더, JSON, 상태 코드의 색상을 구성합니다. 다양한 터미널용 내장 테마를 사용할 수 있습니다: autumn, borland, fruity, monokai, native, tango.
프로그래밍 방식 처리를 위해 --body --pretty=none을 사용하세요. 이는 원시 JSON을 반환합니다. 컴팩트한 출력은 스크립트에서 API 테스트를 자동화할 때 jq, sed 등의 파서에 전달하는 데 유용합니다.
Httpie는 --print 플래그를 통해 여러 출력 형식을 지원합니다: H(요청 헤더), B(요청 본문), h(응답 헤더), b(응답 본문). --print=hb 조합은 연결의 메타 정보를 제외하고 응답 헤더와 본문만 출력합니다. --pretty=all 플래그는 가독성을 위해 들여쓰기가 있는 색상 형식을 활성화합니다.
Httpie는 환경 변수 HTTPIE_COLORS를 통한 색상 사용자 지정을 지원합니다. URL, 헤더, JSON 키, 응답 상태 코드의 색상을 구성할 수 있습니다. 다양한 터미널 유형과 개인 취향에 맞는 내장 테마가 있습니다: autumn, borland, fruity, monokai, native, tango.
출력의 프로그래밍 방식 처리를 위해 --body --pretty=none 플래그 조합을 사용하세요. 이는 색상과 들여쓰기 없이 원시 JSON을 반환합니다. 컴팩트한 출력은 셸 스크립트에서 REST API 테스트를 자동화할 때 jq, sed 등 콘솔 파서에 전달하는 데 유용합니다.
자주 묻는 질문
Httpie는 기본 작업에 플래그가 필요 없는 더 읽기 쉬운 구문, 자동 JSON 직렬화, 응답의 색상 강조, 내장 세션 지원을 제공합니다. cURL은 FTP, SMTP, 비표준 프로토콜 작업과 같은 저수준 작업에 여전히 필수적입니다.
-f 플래그(또는 --form)를 사용하세요: http -f POST example.com name=John file@~/photo.jpg. Httpie가 자동으로 Content-Type: multipart/form-data를 설정합니다. -f 플래그가 없으면 데이터는 application/json으로 전송됩니다.
예, Httpie는 HTTPS를 지원합니다. 자체 서명 인증서에는 --verify=no 플래그를 사용하세요. 사용자 지정 CA 파일을 지정하려면: --verify=/path/to/cert.pem. 기본적으로 인증서 검증이 활성화되어 있습니다.
아니요, Httpie는 WebSocket을 지원하지 않으며 HTTP/HTTPS 프로토콜 전용입니다. WebSocket에는 websocat 또는 wscat을 사용하세요. Httpie는 REST, GraphQL, 파일 작업에 중점을 둡니다.
-d(download) 플래그를 사용하세요: http -d GET https://example.com/file.zip. Httpie는 Content-Disposition 헤더 또는 URL의 원래 이름으로 파일을 저장합니다. 사용자 지정 이름은 -o output.zip으로 지정합니다.
요약
http [method] URL [key=value] [Header:value]는 대부분의 요청에 플래그가 필요하지 않습니다.턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.