curl の代わりに HTTPie を使う

目次

はじめに

サクッとリクエストを送りたいときに 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 リクエストを送れるようになります。ぜひ使ってみてください。

  • URLをコピーしました!
目次