HTTPie
- HTTPie 는 명령줄에서 HTTP 요청을 보내고, 서버의 응답을 확인하는 명령행 도구이다.
- HTTPie 는 python 으로 개발된 콘솔용 http client 유틸리티로 curl 대신 http 개발 및 디버깅 용도로 사용이 가능하다.
- HTTPie 는 Python 으로 작성되어 있으며, 파이썬 패키지로 제공되며, macOS, Linux, windows 등 다양한 운영체제에서 사용할 수 있다.
- HTTPie는 HTTP 클라이언트와 HTTP 서버 간의 통신을 단순화하고, RESTful API의 테스트 및 디버깅 작업을 수행하는 데 유용하다.
HTTPie의 주요 기능
- 요청과 응답이 어떻게 들어갔는지 볼 수 있고 다양한 기능을 내장함
- curl 에 비해 사용이 쉽다.
- json 지원 기능을 내장
- 출력을 포맷팅하여 보여주므로 가독성이 뛰어남
- Form 과 file 업로드가 쉬움
- HTTP 인증 및 커스텀 헤더 설정 등
- 강력한 세션 기능과 인증 기능을 제공한다.
설치
pip install httpie #pip
apt install httpie #Ubuntu
brew install httpie #Mac
기본 사용법
http [flags] [METHOD] URL [ITEM [ITEM]]
- flags : 실행시 전달할 옵션으로 - 로 시작 (Ex. -json, -a, -form_
- METHOD : HTTP 메소드로 생략시 GET
- URL : 연결할 url
- = 이면 post 인자, == 이면 get 인자
옵션
- -v (verbose, 요청값/응답값 모두 보여줌)
- -h (headers, 헤더만 보여줌)
- -j (json, 요청한 내용 json으로 직열화)
- -f (form, 요청한 내용 보편화된 type으로 요청, file 있으면 multipart로 전환)
- -a (auth, -a 옵션 뒤에 인증 정보를 전달)
- 커스텀 HTTP 헤더를 전송하려면 Header:Value
예시
GET 요청
http GET http://httpbin.org/get
POST 요청
http POST http://httpbin.org/post hello=world
JSON 형식으로 POST 요청
http --json POST example.com a==1 b=2
html form 형식으로
http --form example.com
DELETE 요청
http DELETE example.com a==1
PUT 요청
http PUT example.com a==1 b==2
JSON 데이터 전송
http PUT pie.dev/put name=John email=john@example.org
파일 업로드
http --form POST http://httpbin.org/post name=John file@/path/to/file.txt
사용자 지정 헤더
http httpbin.org/headers User-Agent:Mozilla/5.0 'Referer:http://httpie.org/' X-Foo:Bar
세션 유지하기
- HTTPie 를 사용하는 동안 각 요청은 다른 요청과 독립적이다.
- 다른 HTTP 요청에 대해 세션을 유지하고 싶은 경우에 대비해 세션을 유지할 수 있다.
- 세션을 유지하려면 다음과 같이 명명된 세션을 만들기만 하면 된다.
http --session=roy -a roy:mypass www.myservice.com
- 위 명령은 세션 이름을 사용해 다른 요청에도 사용할 수 있는 roy 라는 세션을 만든다.
- 다음은 roy 세션을 사용하는 방법이다.
http --session=roy www.myservice.com
참고로 이 파일은 ~/.httpie/sessions/<host>/<name>.json 에 저장된다.
세션 파일 활용가능
- 이름 대신 세션 파일의 경로를 직접 지정할 수 있다.
- 이를 통해 여러 호스트에서 세션을 재사용 할 수 있다.
http --session = /tmp/session.json example.org
http --session = /tmp/session.json admin.example.org
http --session = ~ / .httpie / sessions / another.example.org
http --session-read-only = /tmp/session.json example.org
HTTPie를 통한 Token 획득 및 요청
http POST http://주소/api-token-auth/ username="유저명" password="암호"
http http://localhost:8000/api/post/ "Authorization:Token <TOKEN값입력>"
#환경변수를 설정해서 편하게 이용하자
export HOST="http://localhost:8000"
export TOKEN="d7ec115d8370de00f06c50ec5b61bd519b1038ae"
# Post List
http $HOST/api/post/ "Authorization: Token $TOKEN"
# Post Create
http POST $HOST/api/post/ "Authorization: Token $TOKEN" message="hello"
# Post Create with Photo
http --form POST $HOST/api/post/ "Authorization: Token $TOKEN" message="hello" photo@"f1.jpg" # httpie 문법임, 현재 프로젝트전체폴에경로에존재하는 사진파일
# Post#16 Detail
http GET $HOST/api/post/16/ "Authorization: Token $TOKEN"
# Post#16 Update
http PATCH $HOST/api/post/16/ "Authorization: Token $TOKEN" message="patched"
http PUT $HOST/api/post/16/ "Authorization: Token $TOKEN" message="updated"
# Post#16 Delete
http DELETE $HOST/api/post/16/ "Authorization: Token $TOKEN"
1. HTTP 메서드
http GET http://httpbin.org/get # GET 메서드
http POST http://httpbin.org/post # POST 메서드
http PUT http://httpbin.org/put # PUT 메서드
http DELETE http://httpbin.org/delete # DELETE 메서드
2. Request Headers
http GET http://httpbin.org/get "User-Agent: Mozilla/5.0" "Accept: application/json" # Request 헤더 설정
3. Request Body
http POST http://httpbin.org/post name="John" email="john@example.com" # Request body 설정
http PUT http://httpbin.org/put < file.txt # 파일에서 request body 로드
4. Authentication
http --auth user:password GET http://httpbin.org/basic-auth/user/password # HTTP Basic 인증
http --auth-type digest --auth user:password GET http://httpbin.org/digest-auth/auth/user/password # HTTP Digest 인증
5. Output
http GET http://httpbin.org/get --output response.txt # response를 파일로 저장
http GET http://httpbin.org/get --download # 파일 다운로드
http GET http://httpbin.org/get --pretty=all # pretty-print response 출력
6. Miscellaneous
http GET http://httpbin.org/get --verify=no # SSL 인증서 검증 생략
http GET http://httpbin.org/get --timeout=2 # Timeout 설정
http GET http://httpbin.org/get --check-status # HTTP 상태 코드 확인
[이 외의 옵션들은 공식 문서 참조]