분류 기타

httpie - curl보다 훨씬 더 개발 친화적인 명령 줄 HTTP 클라이언트.

컨텐츠 정보

  • 조회 314 (작성일 )

본문

HTTPie (aitch-tee-tee-pie로 발음)는 명령 줄 HTTP 클라이언트입니다. 목표는 CLI와 웹 서비스 간의 상호 작용을 최대한 인간 친화적으로 만드는 것입니다. 


https://httpie.io/

https://github.com/httpie/httpie


HTTPie는 테스트, 디버깅 및 일반적으로 API 및 HTTP 서버와 상호 작용하도록 설계되었습니다. http 및 https 명령을 사용하면 임의의 HTTP 요청을 만들고 보낼 수 있습니다. 간단하고 자연스러운 구문을 사용하고 형식이 지정되고 색상이 지정된 출력을 제공합니다.


이 문서는 httpie.org/docs에서 가장 잘 볼 수 있습니다. 여기에서 해당 HTTPie 버전을 선택하고 termible.io 임베디드 터미널을 사용하여 브라우저에서 직접 예제를 실행할 수 있습니다. GitHub에서 이것을 읽고 있다면 이 텍스트는 현재 개발 버전을 다룹니다. README.rst를 편집하여 문서에 대한 수정 및 개선 사항을 제출하도록 초대됩니다.


주요 특징 


  • 표현적이고 직관적인 구문
  • 형식화되고 색상이 지정된 터미널 출력
  • 기본 제공 JSON 지원
  • 양식 및 파일 업로드
  • HTTPS, 프록시 및 인증
  • 임의 요청 데이터
  • 맞춤 헤더
  • 영구 세션
  • Wget과 유사한 다운로드
  • Linux, macOS 및 Windows 지원
  • 플러그인
  • 문서
  • 테스트 범위

HTTPie compared to cURL 

설치 


macOS 


macOS에서 HTTPie는 Homebrew를 통해 설치할 수 있습니다 (권장) :


brew install httpie

MacPorts 포트도 사용할 수 있습니다.

port install httpie

Linux 


대부분의 Linux 배포는 시스템 패키지 관리자를 사용하여 설치할 수 있는 패키지를 제공합니다. 예를 들면 다음과 같습니다.


# Debian, Ubuntu, etc.
$ apt install httpie


# Fedora
$ dnf install httpie
# CentOS, RHEL, ...
$ yum install httpie
# Gentoo
$ emerge httpie
# Arch Linux
$ pacman -S httpie


Windows, etc. 


범용 설치 방법 (Windows, Mac OS X, Linux에서 작동하고 항상 최신 버전을 제공함)은 pip를 사용하는 것입니다.


# Make sure we have an up-to-date version of pip and setuptools:
$ pip install --upgrade pip setuptools

$ pip install --upgrade httpie

(어떤 이유로 pip 설치가 실패하면 easy_install httpie를 폴백으로 시도 할 수 있습니다.)


Python 버전 


Python 버전 3.6 이상이 필요합니다.


불안정한 버전 


GitHub의 마스터 브랜치에서 직접 출시되지 않은 최신 개발 버전을 설치할 수도 있습니다. 향후 안정적인 릴리스의 작업이 진행 중이므로 경험이 원활하지 않을 수 있습니다.


macOS에서는 Homebrew를 사용하여 설치할 수 있습니다.


brew install httpie --HEAD

그렇지 않으면 pip :

pip install --upgrade https://github.com/httpie/httpie/archive/master.tar.gz

이제 -dev 접미사가 있는 현재 개발 버전 식별자가 있는지 확인합니다. 예를 들면 다음과 같습니다.


http --version
# 2.0.0-dev

용법 


Hello World :


http https://httpie.org/hello

개요:

http [flags] [METHOD] URL [ITEM [ITEM]]

http --help를 참조하십시오.


 


사용자 지정 HTTP 메서드, HTTP 헤더 JSON 데이터 :

http PUT httpbin.org/put X-API-Token:123 name=John

양식 제출 :

http -f POST httpbin.org/post hello=World

출력 옵션 중 하나를 사용하여 전송되는 요청을 확인하십시오.

http -v httpbin.org/get

오프라인 모드를 사용하여 요청을 보내지 않고 작성 및 인쇄 :

http --offline httpbin.org/post hello=offline

GitHub API를 사용하여 인증 문제에 대한 의견을 게시하십시오.

http -a USERNAME POST https://api.github.com/repos/httpie/httpie/issues/83/comments body='HTTPie is awesome! :heart:'

리디렉션 된 입력을 사용하여 파일 업로드 :

http httpbin.org/post < files/data.json

파일을 다운로드하고 리디렉션 된 출력을 통해 저장합니다.

http httpbin.org/image/png > image.png

파일 wget 스타일 다운로드 

http --download httpbin.org/image/png

이름이 지정된 세션을 사용하여 동일한 호스트에 대한 요청간에 통신의 특정 측면이 지속되도록 합니다.

http --session=logged-in -a username:password httpbin.org/get API-Key:123
http --session=logged-in httpbin.org/headers

누락 된 DNS 레코드를 해결하기 위해 사용자 지정 호스트 헤더를 설정합니다.

http localhost:8000 Host:example.com

HTTP method 


HTTP 메서드의 이름은 URL 인수 바로 앞에 있습니다.

http DELETE httpbin.org/delete

전송되는 실제 요청 라인과 유사합니다.

DELETE /delete HTTP/1.1

METHOD 인수가 명령에서 생략되면 HTTPie는 기본적으로 GET (요청 데이터 없음) 또는 POST (요청 데이터 포함)로 설정됩니다.


Request URL 


HTTPie가 요청을 수행하는 데 필요한 유일한 정보는 URL입니다.


기본 체계는 http : //이며 인수에서 생략 할 수 있습니다.


http example.org
# => http://example.org

HTTPie는 기본 체계가 https : // 인 https 실행 파일도 설치합니다.

https example.org
# => https://example.org


Querystring parameters 


터미널에서 쿼리 문자열 매개 변수를 사용하여 URL을 수동으로 구성하는 경우 URL 매개 변수를 추가하기 위한 param == value 구문을 사용할 수 있습니다.


이를 통해 쉘의 & 구분 기호를 이스케이프하는 것에 대해 걱정할 필요가 없습니다. 또한 매개 변수 이름이나 값의 모든 특수 문자는 자동으로 URL 이스케이프 처리됩니다 (HTTPie가 수정하지 않는 전체 URL에 지정된 매개 변수와 반대).

http https://api.github.com/search/repositories q==httpie per_page==1
GET /search/repositories?q=httpie&per_page=1 HTTP/1.1

URL shortcuts for localhost 


또한 localhost에 대한 curl과 유사한 속기가 지원됩니다. 즉, 예를 들어 : 3000은 http : // localhost : 3000으로 확장됩니다. 포트가 생략되면 포트 80으로 간주됩니다.

http :/foo
GET /foo HTTP/1.1
Host: localhost
http :3000/bar
GET /bar HTTP/1.1
Host: localhost:3000
http :
GET / HTTP/1.1
Host: localhost

기타 기본 체계 


HTTPie가 https로 호출되면 기본 체계는 https : //입니다 ($ https example.org는 https://example.org에 요청을 합니다).


--default-scheme <URL_SCHEME> 옵션을 사용하여 HTTP (플러그인을 통해 지원 될 수 있음) 이외의 다른 프로토콜에 대한 바로 가기를 만들 수도 있습니다. httpie-unixsocket 플러그인의 예 :

# Before
$ http http+unix://%2Fvar%2Frun%2Fdocker.sock/info
# Create an alias
$ alias http-unix='http --default-scheme="http+unix"'
# Now the scheme can be omitted
$ http-unix %2Fvar%2Frun%2Fdocker.sock/info


--path-as-is 


HTTP 클라이언트의 표준 동작은 일반적으로 파일 시스템과 같이 점 세그먼트를 스쿼시하여 URL의 경로 부분을 정규화하는 것입니다.

http -v example.org/./../../etc/password
GET /etc/password HTTP/1.1

--path-as-is 옵션을 사용하면 이 동작을 비활성화 할 수 있습니다.

http --path-as-is -v example.org/./../../etc/password
GET /../../etc/password HTTP/1.1

Request items 


HTTP 헤더, 간단한 JSON 및 양식 데이터, 파일 및 URL 매개 변수를 지정하기 위한 편리한 메커니즘을 제공하는 몇 가지 다른 요청 항목 유형이 있습니다.


URL 뒤에 지정된 키 / 값 쌍입니다. 모두 공통적으로 전송되는 실제 요청의 일부가 되며 해당 유형은 사용 된 구분 기호 :, =, : =, ==, @, = @ 및 : = @에 의해서만 구별됩니다. @가있는 파일은 파일 경로를 값으로 예상합니다.


Item TypeDescription
HTTP Headers Name:ValueArbitrary HTTP header, e.g. X-API-Token:123.
URL parameters name==valueAppends the given name/value pair as a query string parameter to the URL. The == separator is used.
Data Fields field=valuefield=@file.txtRequest data fields to be serialized as a JSON object (default), to be form-encoded (with --form, -f), or to be serialized as multipart/form-data (with --multipart).
Raw JSON fields field:=jsonfield:=@file.jsonUseful when sending JSON and one or more fields need to be a BooleanNumber, nested Object, or an Array, e.g., meals:='["ham","spam"]' or pies:=[1,2,3] (note the quotes).
Fields upload fields field@/dir/file field@file;typeOnly available with --form, -f and --multipart. For example screenshot@~/Pictures/img.png, or 'cv@cv.txt;text/markdown'. With --form, the presence of a file field results in a --multipart request.

데이터 필드가 요청 데이터를 지정하는 유일한 방법은 아닙니다. 리디렉션 된 입력은 임의의 요청 데이터를 전달하기 위한 메커니즘입니다.