はじめに
curlコマンドは、業務での使用頻度が高いですが、なかなか知識が定着しないので、アウトプットとして記事に残します。curlコマンドを触ったことない人にも参考になればなと思います。
curlコマンドとは?
curlは、クライアントからサーバへリクエストし、データを転送するためのツールです。
様々なプロトコルをサポートしていますが、本記事では使用頻度の高いHTTPを取り上げます。
curlコマンドで何が見れるの?
実際にコマンドを叩いて、リクエストしたものがどのように返ってくるのかを確認します。
curlコマンド実行は
curl [options...] <url>
googleトップページのURLを指定して、curlコマンドを実行してみます。
メソッドを明示的に指定しない場合は、GETリクエストが投げられます。
$ curl https://www.google.com
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探しの情報を見つけてください。" name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/logos/doodles/2023/yukie-chiris-120th-birthday-6753651837110050-l.png" itemprop="image">
*** 省略 ****
たくさん出てきたので省略していますが、Googleトップページのhtmlファイルが返ってきていますね。
レスポンス結果がすべて出てきても、必要のないケースが多いと思います。それに対応する [options...]
があったりするので、後述の「用途別コマンド例」で詳しく説明します。
用途別コマンド例
curlコマンドはオプションで用途別にレスポンスを確認することができます
GET以外のメソッドでリクエストしたい
curl -X POST -w '%{http_code}\n' "https://www.google.com"
※ 丁度いいPOSTがうまくいくURLがなかったため、googleトップページにリクエストを投げています。結果はもちろん失敗しています。
-
-X [http method]
httpメソッドを指定できます。先ほども記載した通りで何も記載しないと、GETリクエストが投げられます。
結果をファイルに出力
$ curl -o ./hoge.txt "https://www.google.com"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 18324 0 18324 0 0 90266 0 --:--:-- --:--:-- --:--:-- 90266
$ cat hoge.txt
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探しの情報を見つけてください。" name="description">....
-
o
オプション
curlコマンド結果の出力先を指定できます。↑ではhoge.txtに結果が出力しているのがわかります。
進捗表示が邪魔なので消したい場合
以下のように進捗が表示されるの煩わしい場合は、-s
で削除します。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 18388 0 18388 0 0 51943 0 --:--:-- --:--:-- --:--:-- 51943
$ curl -o ./hoge.txt -s "https://www.google.com"
$
ステータスコードのみ確認したい場合
$ curl -o /dev/null -w '%{http_code}\n' -s "https://www.google.com"
200
-
/dev/null
/dev/null
は書き込まれたデータを全て捨て(writeシステムコールは成功する)、読み出してもどんなプロセスに対してもデータを返さない。(参照: https://ja.wikipedia.org/wiki//dev/null)
つまり、curlコマンドでたたかれた結果は/dev/nullに書き込まれますが、データはすべて捨てられています。 -
-w '%{http_code}\n'
オプション
改行してステータスコードを表示します。ステータスコードの詳細については以下記事を参考にしてみてください!
https://developer.mozilla.org/ja/docs/Web/HTTP/Status
参考