curlに変わる便利コマンドHTTPieを使ってみた

More than 1 year has passed since last update.

こんにちは。エクセルソフトの田淵です。

人のデモを見て新しいツールを知るのはとても楽しいですね。

LinuxのシェルのHttpClientといえばcurlですが、今日見たデモでhttpというコマンドですごく直感的にアクセスしていて、取得した情報の標準出力もシンタックスハイライトされて素晴らしかったので、そのコマンドについて紹介します。

HTTPieです。


HTTPieとは

curl vs HTTPie

画像https://httpie.org/公式サイトより

特徴として以下があります。


  • 標準でいい感じ

  • 直感的でいい感じのコマンド公文

  • シンタックスハイライトされた標準出力

  • ビルトインでJSONをサポート

  • 永続的なセッション

  • フォームやファイルアップロード

  • HTTPS、プロキシ、認証をサポート

  • 任意のリクエストデータとヘッダーをサポート

  • Wgetライクなダウンロード

  • 拡張機能

  • Linux、Mac OSX、Windowsをサポート


インストール


macOS

Homebrew

$ brew install httpie

またはMacPorts

$ port install httpie


Linux


Debian、Ubuntuなど

$ 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

httpie002.png

HTTPのメソッドも簡単に使えます。HTTPieは標準でContent-type: application/jsonを指定するため、特にAPI Serverにアクセスする際は便利な気がします。

例えばPOSTする場合は例えば次のように記載します。この例では擬似(?)APIを提供するhttpbin.orgを使用します。

$ 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"
}

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ですが、:=を使用するとintboolも送れます。

配列を送りたい場合は、'["value1","value2"]'のようにします。

ファイルから読み込む場合は=@:=@を使用します。

詳しくはドキュメントを参照してください。

Documentation | HTTPie – CLI HTTP client


Windowsで使う場合の注意点

"が特殊文字として扱われるため、コマンドラインでは正しく動作しません。PowerShellを使って、"\"としてエスケープすれば同じように動作します。

シェル、PowerShellからかるーい感じでHTTPアクセスしたい方は使ってみてはいかがでしょうか?

以上です。