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
# ...