2023-12-03 #tips

curl -I ではなく,curl -i を使おう


curl はみんな大好き CLI の HTTP クライアントです.
歴史あるツールであり,豊富なオプションのため,UNIX 系 OS ユーザなら誰もが使ったことがあるでしょう.
最近,curl -I を使って失敗したことがあったので,ここに記しておきます.

-I-i の違い

-I-i は,それぞれ以下のようなオプションです.

  • -I : ヘッダのみを表示
  • -i : ヘッダとボディを表示

-I の罠

レスポンスが長くて,ボディはいらない・レスポンスヘッダのみが欲しいときは -I を使うと便利そうに見えますが,ここに罠がありました.

curl -I "https://my-api.example.com"
# HTTP/2 405
# date: Sat, 03 Dec 2023 12:00:00 GMT
# ...

なんと 405 が返ってきてしまいました.
405 = Method Not Allowed.サーバはそのメソッドを許可していないと行っています.このときの私は,サーバが落ちたのではないかと勘違いしてしまいました.焦りますよね.

curl のドキュメント を見ると,-IHEAD メソッドを使ってリクエストを送ると書いてあります.
私のアプリケーションでは,GET, POST 以外を 405 にしていたので,-I では 405 が返ってくるのは当然でした.

-i を使おう

-i を使うと確かに,200 が返ってきました.ただし,ボディを含んでしまいます.

そこで,-D - を使い,レスポンスヘッダを標準出力に出し,-o /dev/null でボディを捨てることで,実現したかったものが得られます.

curl -s -D - -o /dev/null "https://my-api.example.com"

# HTTP/2 200
# date: Sat, 03 Dec 2023 12:00:00 GMT
# ...