HTTPie, curl을 대체할 만한 강력한 http client

지난주인가요? 트윗보다가 쓸만해보이는 curl 같은 도구를 발견했습니다. 바로 httpie라는 도구인데요, human friendly한 컨셉에 처음부터 약간 호감이였고 설치해서 써보니 이건 물건인 것 같아 공유 차원에서 간단하게 글로 작성해봅니다 😍

https://github.com/httpie/httpie

HTTPie

우선 이 도구는 curl과 비슷한 http 요청과 응답을 처리할 수 있는 도구입니다. 다만 기능적인 부분이나 컨셉적인 부분이나 API 등의 테스팅에서는 curl보다 훨씬 사용성에서 뛰어나단 느낌을 받았습니다. 기본적으로 굉장히 colorful하며 request/response에 대한 format 적인 부분(예를들면 자동으로 포맷을 변경해서 전달하는?)이 굉장히 편리하다보니 http 기반의 테스팅 시 정말 유용한 도구입니다.

As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.

image

Install

아래 읽어보시면 OS별로 잘 나와 있습니다. 저는 주로 macos를 사용하기 떄문에 간단히 brew로 설치했습니다. https://github.com/httpie/httpie#installation

brew install httpie
http

Usage of httpie

httpie는 엄청 많은 기능을 지원합니다. 그래서 help를 보면 복잡해 보이지만, 실제론 command line 구성 자체는 굉장히 단순합니다.

http {METHOD} {URL} {ITEM}

여기서 Method는 HTTP Method(GET, POST, PUT, DELETE 등)을 의미하며 기본값으론 GET이 설정되어 있습니다. (curl이랑 동일)

URL은 대상 URL을 의미하며 ITEM은 추가적인 데이터값들(POST/JSON Body 등)이 들어갑니다.

help

usage: http [--json] [--form] [--multipart] [--boundary BOUNDARY] [--compress] [--pretty {all,colors,format,none}] [--style STYLE] [--unsorted] [--sorted]
            [--format-options FORMAT_OPTIONS] [--print WHAT] [--headers] [--body] [--verbose] [--all] [--history-print WHAT] [--stream] [--output FILE] [--download] [--continue]
            [--quiet] [--session SESSION_NAME_OR_PATH | --session-read-only SESSION_NAME_OR_PATH] [--auth USER[:PASS]] [--auth-type {basic,digest}] [--ignore-netrc] [--offline]
            [--proxy PROTOCOL:PROXY_URL] [--follow] [--max-redirects MAX_REDIRECTS] [--max-headers MAX_HEADERS] [--timeout SECONDS] [--check-status] [--path-as-is] [--chunked]
            [--verify VERIFY] [--ssl {ssl2.3,tls1,tls1.1,tls1.2}] [--ciphers CIPHERS] [--cert CERT] [--cert-key CERT_KEY] [--ignore-stdin] [--help] [--version] [--traceback]
            [--default-scheme DEFAULT_SCHEME] [--debug]
            [METHOD] URL [REQUEST_ITEM ...]
http: error: the following arguments are required: URL

약간 비교해보면 이렇습니다. www.hahwul.com 에 POST 요청으로 값을 전달한다고 한다면 아래와 같습니다.

curl

curl https://www.hahwul.com -X POST -d test=1234

httpie

http -f POST https://www.hahwul.com test=1234

여기서 -f 는 form으로 form 포맷으로 전달하기 위한 옵션입니다.

이렇게 보면 크게 차이가 안나지만 JSON 등의 포맷이 있는 경우 차이가 확연하게 나타나기 시작합니다. (httpie가 JSON이 기본값이기 때문에, 그게 아니여도 위에서 -f 옵션으로 form 모드로 사용하는것도 편리하죠)

curl

curl -X PUT https://www.hahwul.com -d "{\"data\":\"test\"}"

httpie

http PUT https://www.hahwul.com data=test

아래에 예시가 많습니다. 파일 다운로드/업로드 및 curl로 작성하면 복잡해질 수 있는 command line을 짧고 간결하게 구성할 수 있어서 사용하는 사람 / 보는 사람 모두 편리한 API 스펙을 정의할 수도 있겠네요 😁

https://github.com/httpie/httpie#examples

References