Back
Featured image of post HTTPie, curl을 대체할 만한 강력한 http client

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

Licensed under CC BY-NC-SA 4.0
Last updated on Jul 10, 2021 01:05 +0900