curl
コマンドは URL を指定してサーバー上のリソースにアクセスするためのコマンドで、Web API のテストや、ファイルのダウンロードに使用できます。
昔は curl
コマンドは Linux 用のコマンドという認識でしたが、Windows 10 には標準搭載されるようになりました。
curl
は様々なプロトコルで通信できますが、主に HTTP/HTTPS が使用されます。
curl コマンドでファイルをダウンロードする
curl コマンドはデフォルトではダウンロードしたファイルを標準出力に出力します。
-o
(小文字のオー)オプションや、-O
(大文字のオー)オプションを指定することで、ファイルに保存する ことができます。
指定したファイル名で保存 (-o)
# カレントディレクトリに sample.zip という名前で保存(この場合は後述の -O を使うと楽)
$ curl -L http://example.com/sample.zip -o sample.zip
# 保存先を絶対パスで指定
$ curl -L http://example.com/sample.zip -o /tmp/sample.zip
ダウンロード元と同じファイル名で保存 (-O)
$ curl -L -O http://example.com/sample.zip
curl コマンドで GET/POST リクエストを送信する
REST API などのテストに curl
コマンドを利用できます。
GET リクエスト
特にオプションを指定しなければ、HTTP の GET リクエストが送信されます。
$ curl https://pokeapi.co/api/v2/pokemon/ditto
...(JSON データが返ってくる)...
POST リクエスト
HTTP POST リクエストを送るには、--request POST
オプションでメソッドを明示するか、-d (--data)
オプションで Body 部分で送るデータを指定します(両方指定しても OK です)。
$ curl http://localhost:3000/books -d {}
下記はより複雑なオプションを指定したリクエストの例です。
HTTP リクエストヘッダー (-H / --header
) で API キー(アクセストークン)を指定することはよくあります。
$ curl --request POST \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--data '{
"title": "Created with the REST API",
"body": "This is a test issue created by the REST API"
}'
(おまけ)wget で POST リクエスト
wget
コマンドの場合は次のように POST リクエストを送信できます。
$ wget http://localhost:3000/books --post-data='{}' -O -