curl로 바뀌는 편리한 명령 HTTPie를 사용해 보았습니다.

8172 단어 httpiecurl
안녕하세요. 엑셀 소프트의 타부치입니다.

사람들의 데모를 보면서 새로운 도구를 아는 것은 매우 재미 있습니다.

Linux의 쉘의 HttpClient라고 하면 curl 입니다만, 오늘 본 데모로 http 라는 커멘드입니다. 그 명령에 대해 소개합니다.

HTTPie 입니다.

HTTPie란?



curl vs HTTPie

이미지 h tps : // h t 피어. rg/ 공식 사이트에서

특징으로 다음이 있습니다.
  • 표준으로 좋은 느낌
  • 직관적이고 좋은 느낌의 명령 공문
  • 구문 강조된 표준 출력
  • 내장형에서 JSON 지원
  • 영구 세션
  • 양식 및 파일 업로드
  • HTTPS, 프록시, 인증 지원
  • 모든 요청 데이터 및 헤더 지원
  • Wget 같은 다운로드
  • 확장 기능
  • Linux, Mac OSX, Windows 지원

  • 설치



    macOS



    Homebrew
    $ brew install httpie
    

    또는 MacPorts
    $ port install httpie
    

    리눅스



    데비안, 우분투 등
    $ apt-get install httpie
    

    Fedora, CentOS, RHEL 등
    $ yum install httpie
    

    Windows 기타



    Python 패키지 관리 시스템 pip을 사용합니다.
    $ pip install --upgrade pip setuptools
    
    $ pip install --upgrade httpie
    

    HTTPie를 사용해보기



    Hello World
    $ http httpie.org
    

    httpie.org는 왠지 301을 돌려주는 것 같고, 301 가 돌려주면 성공입니다. 신택스 하이라이트되어 있어 보기 쉽네요!
    HTTP/1.1 301 Moved Permanently
    CF-RAY: 36c2f9ffc4692e15-NRT
    Cache-Control: max-age=3600
    Connection: keep-alive
    Date: Fri, 09 Jun 2017 09:13:43 GMT
    Expires: Fri, 09 Jun 2017 10:13:43 GMT
    Location: https://httpie.org/
    Server: cloudflare-nginx
    Transfer-Encoding: chunked
    



    HTTP 메서드도 쉽게 사용할 수 있습니다. HTTPie 는 표준으로 Content-type: application/json 를 지정하기 때문에, 특히 API Server 에 액세스 할 때에 편리한 생각이 듭니다.
    예를 들어 POST하는 경우는 예를 들면 다음과 같이 기재합니다. 이 예제에서는 의사(?) API를 제공하는 htt 항공편. 오 rg을 사용합니다.
    $ http POST http://httpbin.org/post X-API-Token:123 name=John
    
    X-Api-Token 는 제대로 headers 에 들어가, "name":"John"data 로서 POST 할 수 있는 것을 알 수 있군요.
    HTTP/1.1 200 OK
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Origin: *
    Connection: keep-alive
    Content-Length: 471
    Content-Type: application/json
    Date: Wed, 14 Jun 2017 03:05:16 GMT
    Server: meinheld/0.6.1
    Via: 1.1 vegur
    X-Powered-By: Flask
    X-Processed-Time: 0.000705003738403
    
    {
        "args": {}, 
        "data": "{\"name\": \"John\"}", 
        "files": {}, 
        "form": {}, 
        "headers": {
            "Accept": "application/json", 
            "Accept-Encoding": "gzip, deflate", 
            "Connection": "close", 
            "Content-Length": "16", 
            "Content-Type": "application/json", 
            "Host": "httpbin.org", 
            "User-Agent": "HTTPie/0.9.2", 
            "X-Api-Token": "123"
        }, 
        "json": {
            "name": "John"
        }, 
        "origin": "219.106.251.57", 
        "url": "http://httpbin.org/post"
    }
    



    curl이라면
    $ curl -i -X POST http://httpbin.org/post \
      --header "Content-type: application/json" \
      --header 'X-Api-Agent: 123' \
      --data '{"name":"John"}'
    

    됩니다.

    반대로 HTTPieform 로 보내고 싶은 경우는 -f 옵션을 사용합니다.

    JSON을 보낼 때 TIPS


    http POST http://httpbin.org/post name=John age:=29 married:=false array:='["value1","value2"]'
    

    그러면 "{\"name\": \"John\", \"age\": 29, \"married\": false, \"array\": [\"value1\", \"value2\"]}" data가 전송됩니다.
    = 를 사용하면 name=John"name": "John"표준으로 우변은 String 입니다만, := 를 사용하면 int 이나 bool 도 보낼 수 있습니다.
    배열을 보내고 싶은 경우는 '["value1","value2"]' 와 같이 합니다.
    파일에서 읽으려면 =@ 또는 :=@를 사용하십시오.

    자세한 내용은 문서를 참조하십시오.
    Documentation | HTTPie – CLI HTTP client

    Windows에서 사용하는 경우의 주의점


    " 가 특수 문자로 처리되므로 명령줄에서 제대로 작동하지 않습니다. PowerShell을 사용하여 "\"로 이스케이프하면 같은 방식으로 작동합니다.

    쉘, PowerShell에서 까다로운 느낌으로 HTTP 액세스하고 싶은 분은 사용해 보는 것은 어떻습니까?

    이상입니다.

    좋은 웹페이지 즐겨찾기