curl 7.54.0
-I
(--head
)オプションと-XPOST
を一緒に指定すると発生する問題
curl -I -XPOST "${url}"
でレスポンスのHTTPヘッダーだけが取れる。
ただし、以下の問題があり、使うべきではないと考えている。
実際のHTTPメソッドがわかりにくい(-I
を-X
が上書きする)
-v
オプションをcurlにつけて実行し、実際に発行されるHTTPリクエストを見てみる。
curl -v -I
で実行すると、当然、HEADでリクエストされていることがわかる。しかし、curl -v -I -XPOST
ではPOSTで、curl -v -I -XGET
ではGETで、リクエストされていることがわかる。つまり-I
を-X
が上書きしている。
仕様上、HEADメソッドはGETで定義された冪等性があるエンドポイントに対して実行されるべき
MDN Web DocsやRFC 7231に記載の通り、HEADメソッドはGETで定義された冪等性があるエンドポイントに対して実行されるもの。POSTのエンドポイントに実行されるのはおかしい。
-d
でリクエストボディを付けるとエラーになる
curl -I -XPOST -d'{}'
とリクエストボディを付けると以下のエラーが発生する。
Warning: You can only select one HTTP request method! You asked for both POST
Warning: (-d, --data) and HEAD (-I, --head).
HTTPヘッダーだけ取り出す
HTTPヘッダーを目視で確認する、あるいはレスポンスステータスをシェルでチェックするなど、HTTPヘッダーだけ見たいのであれば、GETエンドポイントでない場合は、-I
オプション以外で対応すべき。
-vso /dev/null
HTTPヘッダー全体を見たいのであれば、-v
オプションでHTTPヘッダーが見れるため、-v
をつけた上で、ボディ自体は/dev/null
に捨ててしまえばいい。
-w'%{http_code}\n' -so /dev/null
レスポンスステータスだけなど、特定のものだけを見たいのであれば、-w
で出力フォーマットの指定をして、ボディ自体は/dev/null
に捨ててしまえばいい。