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 のドキュメント を見ると,-I は HEAD メソッドを使ってリクエストを送ると書いてあります.
私のアプリケーションでは,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
# ...