curl
コマンドは URL を指定してサーバー上のリソースにアクセスするためのコマンドで、Web API のテストや、ファイルのダウンロードに使用できます。
昔は curl
コマンドは Linux 用のコマンドという認識でしたが、Windows 10 には標準搭載されるようになりました。
curl
は様々なプロトコルで通信できますが、主に HTTP/HTTPS が使用されます。
- 参考: curl コマンドのチートシート
curl コマンドでファイルをダウンロードする
curl コマンドはデフォルトではダウンロードしたファイルを標準出力に出力します。
-o
(小文字のオー)オプションや、-O
(大文字のオー)オプションを指定することで、ファイルに保存する ことができます。
同時に -L
オプションを指定しておくと、リダイレクトレスポンスを自動処理してくれます。
ダウンロード元と同名で保存 (-O)
$ curl -L -O http://example.com/sample.zip
別名で保存 (-o)
# カレントディレクトリに foo.zip という名前で保存
$ curl -L -o foo.zip http://example.com/sample.zip
# 保存先を絶対パスで指定することも可能
$ curl -L -o /tmp/foo.zip 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 リクエストを送るには、-X POST (--request POST)
オプションを指定します。
ただし、-d (--data)
オプションで本体部分で送るデータ(ペイロード)を指定すると、デフォルトで POST メソッドが使用されるので、多くの場合は -X POST
は省略できます。
$ curl -d "param1=value1¶m2=value2" http://localhost:3000/books
下記はより複雑なオプションを指定したリクエストの例です。
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 -