はじめに
サクッとリクエストを送りたいときに curl
をよく使いますが、POST リクエストの送り方を忘れたり、JSON の Body を CLI で書くのが面倒、レスポンスが読みにくい、といった点がストレスでした。
そこで便利なのが HTTPie という HTTP クライアントです。最近 GUI 版も出たようですが、ここでは CLI 版の使い方、便利なところを紹介します。
触ってみる
インストール
パッケージマネージャーで簡単にインストールできます。
brew install httpie
バージョンは執筆時点で最新の 3.2.3 を使います。
テスト用サーバー
テスト用に HTTP サーバーを書きます。ここでは Go で書きます。
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Request Path: %s\n", r.URL.Path)
if r.Method == http.MethodGet {
fmt.Fprintf(w, "GET request received!\n")
} else if r.Method == http.MethodPost {
fmt.Fprintf(w, "POST request received!\n")
if r.Body == nil {
return
}
var jsonBody map[string]interface{}
decoder := json.NewDecoder(r.Body)
if err := decoder.Decode(&jsonBody); err != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
fmt.Fprintf(w, "JSON Body: %v\n", jsonBody)
}
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
main.go
に保存して、go run main.go
で 8080 番ポートでサーバーが起動します。
GET リクエストを送る
以下のように http
コマンドで GET リクエストを送ることができます。
色付きで読みやすく結果が表示されます。
自分はヘッダーも見たいことが多いので、この表示は助かります。curl
だと --include
でヘッダーを表示できますが、いつも忘れて調べている気がします。
ヘッダーを表示したくない場合はやや面倒で、-p b
を指定します。ただし、出力をリダイレクトする場合はヘッダーは自動で省略されます。
--print WHAT, -p WHAT
String specifying what the output should contain:
'H' request headers
'B' request body
'h' response headers
'b' response body
'm' response metadata
The default behaviour is 'hb' (i.e., the response
headers and body is printed), if standard output is not redirected.
localhost
は省略できます。
POST リクエストを送る
POST
を引数に渡すと、POST リクエストになります。
JSON を送りたいときは、key=value
の形の引数を渡します。また、Body が空でない場合、POST
を省略すると自動的に POST リクエストになります。
当然もっと複雑な JSON も書けます。
詳しくはドキュメントを参照してください。
ファイルのダウンロード
curl
の場合、必要なオプションを忘れがちですが、HTTPie はシンプルです。
同じファイルがあるときは自動で suffix を付けてくれます。
http -d <url>
おわりに
HTTPie を使うことで、レスポンスは読みやすく、手軽に POST リクエストを送れるようになります。ぜひ使ってみてください。