HTTPie, curl 보다 쉬운 http 호출
HTTPie(에치-티-티-파이)는 CLI 환경에서 cURL을 대체하기 위해서 나온 유틸리티입니다. 간단히 설치 방법과 사용법을 알아보도록 하겠습니다.
소개
curl과 wget을 잘 사용하고 있었는데, 오늘 집에 가는 길에 HTTPie를 알게 되었습니다. HTTPie은 다양한 OS 환경에서 curl과 wget을 대체할 수 있고, 더 낳아가 강력한 세션 및 인증 기능을 제공합니다. 다음은 HTTPie의 주요 특징입니다.
- 직관적인 명령행 문법
- 결과에 대한 포멧팅
- JSON 타입 지원
- Form 파일 업로드
- HTTPS, 프록시 및 인증
- wget과 같은 다운로드 기능
- 다양한 OS(Linux, Mac OS X, Windows) 지원
- 플러그인 기능
- Python 2.6 이상 지원
이 정도면 충분히 검토할 만하죠? 더 자세한 설명은 공식 사이트 문서를 참고해 주시고, 이 글에서는 간단한 사용법만 소개하도록 하겠습니다.
설치
Mac과 Linux는 패키지 관리자를 이용해서 설치가 가능하며, 기타 환경에서는 Python의 pip를 이용해 설치하면 됩니다. 저는 우분투를 사용하므로 apt-get을 통해 설치를 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# Mac OS X $ brew install httpie or $ port install httpie # Linux # Debian-based distributions such as Ubuntu: $ apt-get install httpie # RPM-based distributions: $ yum install httpie # Arch Linux $ pacman -S httpie # Python pip # Make sure we have an up-to-date version of pip and setuptools: $ pip install --upgrade pip setuptools $ pip install --upgrade httpie
기본 사용법
HTTPie는 다음과 같은 명령어로 HTTP 호출을 할 수 있습니다. 더 자세한 명령어는 "http --help"로 확인할 수 있습니다.
1
http [flags] [METHOD] URL [ITEM [ITEM]]
아래 명령어는 combineads 사용자 계정으로 POST 메소드로 https://api.github.com/repos/jkbrzt/httpie/issues/83/comments 주소를 호출하며, JSON 데이터는 body='HTTPie is awesome! :heart:' 를 보내는 내용입니다. 참고로 -v 옵션을 사용해 request의 header와 body의 내용도 찍었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
$ http -v -a combineads POST https://api.github.com/repos/jkbrzt/httpie/issues/83/comments body='HTTPie is awesome! :heart:' http: password for combineads@api.github.com: POST /repos/jkbrzt/httpie/issues/83/comments HTTP/1.1 Accept: application/json Accept-Encoding: gzip, deflate ... Content-Type: application/json Host: api.github.com User-Agent: HTTPie/0.9.2 { "body": "HTTPie is awesome! :heart:" } HTTP/1.1 201 Created ...
다음은 www.google.co.kr에 search 변수에 popit값을 Querystring으로 요청을 보내는 예제입니다. "=="을 키/값 형태로 사용한 것에 주목해주세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$ http -v www.google.co.kr search=='popit' GET /?search=popit HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Host: www.google.co.kr User-Agent: HTTPie/0.9.2 HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Encoding: gzip Content-Length: 4755 Content-Type: text/html; charset=EUC-KR Date: Mon, 05 Dec 2016 13:10:55 GMT Expires: -1 P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info." Server: gws Set-Cookie: NID=91=NHClWNVhU-0gVb1AaPa35oyYQ92qtgNjCqzqiHA3_2Ts5FY1472resxHpyMbDX-E4hWV6wNVhsTR4ApXEBQWawXRfioCx7DY5ONDLQpXAmT6eS1CibffsP7kqKZqRhCl; expires=Tue, 06-Jun-2017 13:10:55 GMT; path=/; domain=.google.co.kr; HttpOnly X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block <!doctype html>
다음은 POST 데이터로 keyword와 param2를 보내는 예제입니다. Google에서는 POST 메소드를 지원하지 않는 군요.^^; Querystring의 데이터는 "=="로 구분하며, POST의 데이터는 "="로 구분하는 것을 알 수 있습니다.[추가 구분자]
1 2 3 4 5 6 7 8 9 10 11
http -v -f www.google.co.kr search=='popit' tbm==isch keyword='post' parma2='hellp' POST /?search=popit&tbm=isch HTTP/1.1 Accept: */* Accept-Encoding: gzip, deflate Connection: keep-alive Content-Length: 25 Content-Type: application/x-www-form-urlencoded; charset=utf-8 Host: www.google.co.kr User-Agent: HTTPie/0.9.2 keyword=post&parma2=hellp HTTP/1.1 405 Method Not Allowed
다음은 "-d" 옵션을 사용해 파일을 다운로드 받는 것입니다.
1 2 3 4 5 6 7 8
➜ ~ http -d https://httpie.org/docs HTTP/1.1 200 OK CF-RAY: 30c7b06b5fdb08fc-CDG Connection: keep-alive ... Transfer-Encoding: chunked Downloading to "docs.html" Done. 84.29 kB in 0.77680s (108.50 kB/s)
이 것외에도 다양한 기능들이 있으나 상세한거는 HTTPie 공식 문서를 참고해주세요. 저는 간단하게 cURL과 wget을 대체하는 수준에서만 알아봤습니다.
앞으로 출퇴근길에 이렇게 알게 되는 유용한 팁을 "지하철 포스팅" 시리즈로 올리겠습니다.
감사합니다.