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을 통해 설치를 했습니다.
# 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"로 확인할 수 있습니다.
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의 내용도 찍었습니다.
$ 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으로 요청을 보내는 예제입니다. "=="을 키/값 형태로 사용한 것에 주목해주세요.
$ 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의 데이터는 "="로 구분하는 것을 알 수 있습니다.[추가 구분자]
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" 옵션을 사용해 파일을 다운로드 받는 것입니다.
➜ ~ 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을 대체하는 수준에서만 알아봤습니다.
앞으로 출퇴근길에 이렇게 알게 되는 유용한 팁을 "지하철 포스팅" 시리즈로 올리겠습니다.
감사합니다.