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 DocsRFC 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に捨ててしまえばいい。