httpie - curl 을 대체할 http client 유틸리티
특징
httpie 는 python 으로 개발된 콘솔용 http client 유틸리티로 curl 대신 http 개발 및 디버깅 용도로 사용 가능하며 다음과 같은 특징이 있다.
- curl 에 비해 사용이 쉬움
- json 지원 기능 내장
- 출력을 포맷팅하여 보여주므로 가독성이 뛰어남
- Form 과 file 업로드가 쉬움
- HTTP 인증 및 커스텀 헤더 설정등
설치
python 으로 개발되었으므로 yum 이나 apt-get 보다는 pip 로 설치하는 것을 권장한다.
pip 설치
wget https://bootstrap.pypa.io/get-pip.py python get-pip.py
httpie 설치
pip install --upgrade httpie
사용자 계정으로 설치하려면
기본 사용
http [flags] [METHOD] URL [ITEM [ITEM]]
- flags : 실행시 전달할 옵션으로 – 로 시작(Ex: --json)
- METHOD : HTTP 메소드로 생략시 GET.
- URL: 연결할 url
http --help 를 실행하면 각 플래그별 상세한 설명을 볼 수 있음.
기본 연결
http httpie.org
자세한 정보 출력
-v 옵션 사용
http -v httpie.org
follow redirect
--follow 옵션을 사용하면 HTTP 301, 302 응답이 올 경우 해당 링크로 이동
http -v --follow http://example.org
--max-redirects=COUNT 옵션을 사용하면 최대 redirect 횟수를 지정할 수 있음.(기본값 30)
http -v --max-redirects 5 --follow http://example.org
Content 제외하고 Header만 출력
서버의 HTTP Response 를 디버깅 해야 할 경우 컨텐츠는 거추장스러우므로 --headers(-h) 옵션을 사용하면 헤더 정보만 출력함.
http --headers http://example.org
download
wget 처럼 다운로드 프로그램으로 사용
http --download example.org/file
SSL
SSL 인증서 검증 안 함
서버의 SSL 인증서에 문제가 있어서 HTTPS 통신에 문제가 있을 경우 --verify=no 옵션을 사용하면 인증서 검증 안함
http --verify=no https://example.org
SSL CA 인증서 지정
CA 인증서가 없어서 검증 에러가 날 경우 --verify 옵션뒤에 CA 인증서 번들 파일을 지정하여 검증 가능(curl 에 신뢰하는 인증기관 인증서(CA Cert) 추가하기 참고)
http --verify=/ssl/custom_ca_bundle https://example.org
SSL version
--ssl={ssl2.3,ssl3, tls1, tls1.1, tls1.2} 옵션으로 SSL 버전 지정
http --ssl=ssl3 https://example.org
HTTP Method
http DELETE example.org/todos/7
Json
http PUT example.org name=John email=john@example.org
아래와 같이 JSON 요청으로 변환되서 전달
PUT / HTTP/1.1 Accept: application/json, */* Accept-Encoding: gzip, deflate Content-Type: application/json Host: example.org { "name": "John", "email": "john@example.org" }
커스텀 Header 설정
커스텀 HTTP 헤더를 전송하려면 Header:Value
문법을 사용하면 됨:
http example.org User-Agent:Bacon/1.0 'Cookie:valued-visitor=yes;foo=bar' \ Accept:application/json Referer:http://httpie.org/
HTTP Authentication
--auth, 또는 -a 옵션 뒤에 인증 정보를 전달
http -a username:password example.org
암호를 커맨드에 전달하지 않을 경우 프롬프트에서 입력
http -a username example.org
Digest auth:
http --auth-type=digest -a username:password example.org
같이보기
Ref
- https://github.com/jkbrzt/httpie
- https://orchestrate.io/blog/2014/06/20/curl-vs-httpie-http-apis/
- https://miteshshah.github.io/sysadmin/httpie-http-for-humans/