Korean (한국어) translation by Dae-yeop Lee (you can also view the original English article)
cURL은 HTTP 요청을 생성하는 데 일반적으로 사용되는 명령줄 도구입니다. 이 튜토리얼에서는 인간에게 친숙한 방식으로 HTTP 요청을 생성하는 명령줄 도구인 HTTPie를 살펴보겠습니다. HTTPie는 간단하고 자연스러운 문법을 가진 명령어를 사용하고 출력 결과를 보기 좋은 방식으로 표시합니다.
공식 문서에서는 다음과 같이 설명하고 있습니다.
HTTPie(에이치-티-티-파이라고 발음)는 명령줄 HTTP 클라이언트입니다. HTTPie의 목표는 웹 서비스와의 CLI 상호작용을 가능한 한 인간 친화적으로 만드는 것입니다. HTTPie는 단순하고 자연스러운 문법을 사용해 임의의 HTTP 요청을 보낼 수 있는 간단한http
명령을 제공하고 컬러로 된 출력 결과를 표시합니다. HTTPie는 HTTP 서버에 대한 테스트, 디버깅, 상호작용하는 데 사용할 수 있습니다.
시작하기
우분투(Ubuntu) 장비에서 HTTPie를 시작하려면 apt-get을 사용해 패키지를 설치해야 합니다.
sudo apt-get install httpie
위와 같은 방법으로 설치하고 나면 시스템에서 HTTPie를 사용할 수 있습니다. HTTPie를 사용해 아무 웹 사이트를 대상으로 GET 요청을 만들어봅시다.
http www.tutsplus.com
위와 같이 질의하면 다음과 같은 응답이 반환됩니다.

보다시피 HTTPie가 설치되어 시스템에서 작동하는 것처럼 보입니다. 자세히 살펴보면 위 명령에서 색상으로 표시된 출력 결과는 URL이 https://tutsplus.com으로 영구적으로 이동했음을 보여줍니다. 따라서 tutsplus을 대상으로 GET 요청 쿼리를 수행하려면 다음과 같이 쿼리를 수정합니다.
http https://tutsplus.com
위 쿼리는 https://tutsplus.com이라는 URL을 대상으로 GET 요청을 수행한 HTML 출력 결과를 반환합니다.
위 쿼리에서 볼 수 있듯이 HTTPie
가 요청을 수행하는 데 필요한 유일한 정보는 URL입니다.
HTTPie를 이용해 기본 요청 수행하기
HTTPie 명령을 자세히 살펴보기에 앞서 HTTPie를 사용해 기본 요청을 수행하는 방법을 살펴보겠습니다. 여기서는 json-server를 이용해 요청을 만들기 위한 더미 서버를 만들고 실행하겠습니다. json-server를 시작하기 위해 npm을 사용해 서버를 설치합니다.
npm install -g json-server
index.js
라는 파일을 만들어 더미 서버에 임의의 데이터를 만듭니다.
// index.js module.exports = function() { var data = { users: [] } // Create 5 users for (var i = 0; i < 5; i++) { data.users.push({ id: i, name: 'user' + i }) } return data }
index.js
파일을 이용해 json-server를 실행합니다.
json-server index.js
이제 http://localhost:3000/에서 서버가 실행될 것입니다.
HTTPie를 이용한 GET 요청
기본적으로 HTTPie에 URL을 지정하면 HTTPie는 요청 유형을 GET으로 간주하고 그에 따라 요청을 수행합니다. 다음은 GET
요청의 예입니다.
http http://localhost:3000/users
위 요청은 다음과 같은 출력 결과를 표시합니다.
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 212 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:40:15 GMT ETag: W/"d4-4+4+bS4GA0+D/tDXlF8voQ" Expires: -1 Pragma: no-cache Vary: Origin, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express [ { "id": 0, "name": "user0" }, { "id": 1, "name": "user1" }, { "id": 2, "name": "user2" }, { "id": 3, "name": "user3" }, { "id": 4, "name": "user4" } ]
HTTPie를 이용한 POST 요청
HTTPie를 이용해 POST 요청을 수행하려면 URL에 게시할 데이터와 함께 POST 키워드를 추가해야 합니다. 다음 예제를 봅시다.
http POST http://localhost:3000/users id=007 name=RoyAgasthyan
이 명령은 터미널 화면에 다음과 같은 출력 결과를 표시합니다.
HTTP/1.1 201 Created Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 43 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:46:22 GMT ETag: W/"2b-mpj//lkYJiGiWBB42OLoKA" Expires: -1 Pragma: no-cache Vary: Origin, X-HTTP-Method-Override, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express { "id": "007", "name": "RoyAgasthyan" }
HTTPie를 이용해 GET 요청을 시도하면 새로 게시된 데이터가 응답에 들어있음을 확인할 수 있습니다.
HTTPie를 이용해 폼 제출하기
폼을 제출하는 것은 사용자가 일반적으로 수행하는 또 한 가지 요청 중 하나입니다. HTTPie를 이용하면 다음과 같이 form
옵션을 지정해 URL로 폼을 제출하는 것이 훨씬 쉬워집니다.
http --form POST www.yourformposturl.com name='Roy'
위 명령을 실행하면 Content-Type
이 자동으로 application/x-www-form-urlencoded; charset = utf-8
로 설정되므로 명시적으로 설정하지 않아도 됩니다.
HTTP 리디렉트 처리하기
앞의 예에서 볼 수 있듯이 기본적으로 HTTPie는 HTTP 리디렉션을 처리하지 않습니다. www.tutsplus.com을 대상으로 GET 요청을 시도했을 때 URL이 옮겨졌음을 나타내는 메시지가 표시됐었습니다. HTTPie가 리디렉션을 처리하게 하려면 요청 명령에 follow
옵션을 추가해야 합니다.
http --follow www.tutsplus.com
위 HTTPie 쿼리는 HTTP 리디렉션을 처리할 것입니다(리디렉션이 필요할 경우).
HTTPie를 이용한 파일 다운로드
HTTPie는 wget 명령과 유사하게 서버에서 파일을 다운로드하는 기능을 제공합니다. 파일을 다운로드하려면 URL과 함께 download
옵션을 지정해야합니다.
http --download http://www.tutorialspoint.com/python/python_tutorial.pdf
위의 명령은 다음과 같은 응답을 표시합니다.
HTTP/1.1 200 OK Accept-Ranges: bytes Access-Control-Allow-Headers: X-Requested-With Access-Control-Allow-Origin: * Content-Length: 3945951 Content-Type: application/pdf Date: Tue, 18 Oct 2016 04:01:43 GMT Etag: "3c35df-52fe21b892a6f" Last-Modified: Thu, 07 Apr 2016 09:57:34 GMT Server: ECS (pnq/AF9A) X-Cache: HIT Downloading 3.76 MB to "python_tutorial.pdf-1" | 28.03 % 1.05 MB 63.85 kB/s 0:00:43 ETA
인증 처리하기
웹 서비스 URL에 접근하려면 인증이 필요할 수 있습니다. HTTPie는 일반적으로 사용되는 대부분의 인증 메커니즘을 지원합니다. 기본적으로 HTTPie는 기본 인증을 지원하므로 사용자명과 비밀번호를 -a
옵션과 함께 요청에 전달하기만 하면 됩니다.
http -a username:password www.mywebservice.com
다이제스트 인증을 사용하려면 -A
옵션을 사용해 인증 메커니즘의 이름을 전달해야 합니다.
http -A digest -a username:password www.myservice.com
응답 표시 형식 커스터마이즈하기
어떤 URL을 대상으로 요청을 수행할 때 헤더 정보와 함께 모든 데이터가 터미널에 표시됩니다. HTTPie는 출력되는 응답을 커스터마이즈하는 옵션을 제공합니다. 요청과 함께 --header
및 --body
옵션을 지정해 개별 헤더와 본문 정보를 출력할 수 있습니다.
http https://www.tutsplus.com --header
위 명령은 다음과 같이 헤더 정보를 출력합니다.
HTTP/1.1 301 Moved Permanently CF-RAY: 2f6669f88fc43548-LHR Connection: keep-alive Date: Sun, 23 Oct 2016 16:02:32 GMT Location: https://tutsplus.com/ Server: cloudflare-nginx Set-Cookie: __cfduid=dfea480f2567e7c463e66999adfdc73d71477238552; expires=Mon, 23-Oct-17 16:02:32 GMT; path=/; domain=.tutsplus.com; HttpOnly Transfer-Encoding: chunked
이제 --body
옵션과 함께 HTTP 요청을 시도하면 본문 부분만 출력될 것입니다.
http www.google.com --body
위 명령은 다음과 같은 결과를 출력합니다.
<HTML> <HEAD> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE> </HEAD> <BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/?gfe_rd=cr&ei=OBwQWPO7Juyq8wf13bzYBw">here</A>. </BODY> </HTML>
세션 유지하기
HTTPie를 사용하는 동안 각 요청은 다른 요청과 독립적입니다. 다른 HTTP 요청에 대해 세션을 유지하고 싶은 경우에 대비해 세션을 유지할 수 있습니다. 세션을 유지하려면 다음과 같이 명명된 세션을 만들기만 하면 됩니다.
http --session=roy -a roy:mypass www.myservice.com
위 명령은 세션 이름을 사용해 다른 요청에도 사용할 수 있는 roy
라는 세션을 만듭니다. 다음은 roy
세션을 사용하는 예입니다.
http --session=roy www.myservice.com
HTTP 프롬프트를 이용한 자동 완성
HTTPie와 관련된 모든 명령을 기억하기는 어려울 수 있습니다. http-prompt
툴킷은 HTTPie와 함께 사용할 수 있는 자동 완성 기능을 제공합니다. http-prompt
를 시작하려면 pip
를 이용해 설치합니다.
sudo pip install http-prompt
세션을 시작하려면 쿼리를 수행할 서버 URL로 http-prompt
를 호출합니다. 앞에서 설치한 json-server
를 다시 시작한 후 다음과 같이 http-prompt
를 호출합니다.
http-prompt http://localhost:3000/users
HTTP의 몇 글자를 입력하면 자동 완성이 표시됩니다.

httpie
를 입력하면 쿼리를 수행할 URL이 표시됩니다.
http http://localhost:3000/users
http-prompt
에서는 모든 HTTPie 요청 명령이 작동할 것입니다. GET을 입력하면 자동 완성에 팝업이 표시됩니다. GET 명령을 입력할 때 다음과 같은 응답이 표시될 것입니다.

정리
이 튜토리얼에서는 좀 더 인간 친화적인 cURL의 대안인 HTTPie
를 시작하는 법을 살펴봤습니다. HTTPie 및 기타 기능을 사용해 GET과 POST 같은 기본 요청 작업을 수행하는 방법을 살펴봤습니다. HTTPie
사용에 대한 자세한 정보는 공식 문서를 참고합니다. 아울러 http-prompt
에 대한 공식 문서도 확인해 보시길 바랍니다. 아래 댓글로 여러분의 생각을 알려주세요.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post