httpie - curl 을 대체할 http client 유틸리티

특징

httpie 는 python 으로 개발된 콘솔용 http client 유틸리티로 curl 대신 http 개발 및 디버깅 용도로 사용 가능하며 다음과 같은 특징이 있다.

  1. curl 에 비해 사용이 쉬움
  2. json 지원 기능 내장
  3. 출력을 포맷팅하여 보여주므로 가독성이 뛰어남
  4. Form 과 file 업로드가 쉬움
  5. HTTP 인증 및 커스텀 헤더 설정등

 

설치

python  으로 개발되었으므로 yum 이나 apt-get 보다는 pip 로 설치하는 것을 권장한다.

  1. pip 설치

    wget https://bootstrap.pypa.io/get-pip.py
    python get-pip.py
  2. 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