curl/httpie 比較チートシート

CLIJSONの整形をする

http://yuroyoro.hatenablog.com/entry/2013/04/02/190709

httpie

インストールが必要になってしまいますが
httpのレスポンスを整形したいだけであればhttpieも便利です。
https://github.com/jkbr/httpie

pip install httpie

jsonコンテンツだけでなくhtmlやヘッダー情報などもカラーリングしてくれるので
だいぶ見やすくなります。

HTML

これが

こうなる。日本語もバッチリ。 

JSON

これが

こうなる


ドキュメントに
HTTPie: a CLI, cURL-like tool for humans
と記述されている通り、
自動でカラーリングしてくれたり、フォーマットに則って整形してくれたり
結果が人間の目にも優しくなっております。


ただし実際使ってみると
curlと比べて一長一短だったりするところもあるので
自分は curl と httpie を併用して使っています。
そして両方使っていると自分でもこんがらがることがあるので
比較チートシートを書いてみました。

curl / httpie 比較表

説明 curl httpie
整形しないで表示 (default) http --pretty=none example.com
'レスポンスヘッダ+body'表示 curl -i example.com http example.com
'ヘッダーのみ'表示 curl -I example.com http -h example.com
'body'のみ表示 curl example.com http -b example.com
'リクエストヘッダ+レスポンスヘッダ+body'表示 curl -v example.com http -v example.com
ファイル出力 curl -o index.html example.com http example.com > index.txt*1
Basic認証 curl -u user:pass example.com http -a user:pass example.org
ヘッダー書き換え curl -H 'User-Agent:Bacon/1.0' -H 'Cookie:valued-visitor=yes' -H 'X-Foo:Bar Referer:http://httpie.org/' example.com*2 http example.com User-Agent:Bacon/1.0 Cookie:valued-visitor=yes X-Foo:Bar Referer:http://httpie.org/
Cookie付ける curl -b 'valued-visitor=yes' example.com http example.com Cookie:valued-visitor=yes
Proxy curl --proxy=10.10.1.10:3128 example.com http --proxy=http:10.10.1.10:3128 example.com*3
メソッド指定 curl -X PUT example.com http PUT example.com
POSTフォームデータ curl -X POST -d uid=xxx -d key=yyy example.com http -f POST example.com uid=xxx key=yyy
タイムアウト curl --max-time 5 example.com http --timeout 5 example.com
トレース curl --trace trace.log example.com -
redirect先に再接続 curl -L example.com http --follow example.com
SSL警告無視 curl -k https://example.com/ http --verify no https://example.com/

※ここにあるのはあくまで一例で
 同じ事をするにも様々な書き方が存在します。

httpieの使用上の注意点など

基本的には以下のようなフォーマットとなります。

http <option> [METHOD] URL [REQUEST ITEM [REQUEST ITEM ...]]

ここで注意しておきたいのが、
[METHOD] [URL] [REQUEST ITEM]
という並びを変えてはいけないということです。
これを守っておけば比較的ハマることはないかと思います。

# フォーマット間にオプション付けたら駄目
http POST -v example.com hoge=fuga
# これも駄目
http POST example.com -v hoge=fuga

# 前と後ろならOK
http -v POST example.com hoge=fuga
http POST example.com hoge=fuga -v

httpieの便利機能

セッション

sessionオプションでヘッダ情報を保持できます。

# 「toritsuyo1」というセッション名で保持
http --session=toritsuyo1 -a toritori:himitsu https://ninsho.site/ User-Agent:Bacon/1.0 Cookie:valued-visitor=yes

# Basic認証情報/ユーザエージェント/Cookieなどを引き継げる
http --session=toritsuyo1 https://ninsho.site/
コンフィグ

$HOME/.httpie/config.json にデフォルトで指定するオプションなどを指定出来ます。
詳しくはドキュメントを。

まとめ

自分の場合ですが
単純なGETやPOSTのヘッダやコンテンツを確認したいのならhttpieを、
詳細なトレースを取ったりプロファイルする時にはcurlを使っています。
そのような感じで
curl から httpieに完全に移行する」ということではなく
用途によって使い分けるのがベストではないでしょうか。

合わせて読みたい

オマケ

完全に蛇足ですが、jqコマンドに似たjtコマンドというのもあるようです。
普段perl使っている人はこちらもオススメ。
http://search.cpan.org/dist/App-jt/bin/jt

*1:あら不思議!コンテンツだけがダウンロードされます

*2:※ショートカットあり -A=ユーザーエージェント -e=リファラ

*3:環境変数もあるらしい