【2026年8月19日時点の情報です】
curl(カール)は、コマンドでWebサーバーにリクエストを送り、返ってきた内容を表示する道具です。APIの動きを試したり、サーバーの設定(リダイレクトなど)を確かめたりするのに使います。この記事では、よく使う書き方と、Windows で使うときの注意をまとめます。
Linux、macOS、Windows 10(版 1803)以降には最初から入っています。入っているかは次のコマンドで確かめられます。
curl --versionページを取得する(GET)
URLだけを書くと、GET でリクエストを送り、返ってきた中身をそのまま表示します。
curl https://api.example.com/usersヘッダーやステータスを確かめる
中身ではなく、「どんな返事が来たか」を見たいときは、次のオプションを使います。
| 書き方 | 表示するもの |
|---|---|
curl -i URL | ヘッダーと中身の両方 |
curl -I URL | ヘッダーだけ(HEADリクエスト) |
curl -v URL | 送ったものと受け取ったもののすべて(うまくいかないときの調査用) |
リダイレクトを確かめる
古いURLから新しいURLへの転送がうまくいっているかは、ヘッダーのステータスと location で分かります。このブログでも、記事をまとめて転送したときにこの形で確かめています。
curl -sI https://example.com/old-page/ | grep -iE "^HTTP|^location"HTTP/2 301
location: /new-page/301 ならずっと移ったという意味で、location が転送先です。grep は Linux・macOS のコマンドなので、Windows では | grep … を外して全部のヘッダーを見ます。
ステータスの番号だけを出す
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/200 のように番号だけが出ます。-o /dev/null は中身を捨てるという意味です(Windows では -o NUL)。
データを送る(POST)
-d で送るデータを書くと、POST で送られます。JSON を送るときは、-H で「中身は JSON」と伝えます。
curl https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "Taro", "role": "developer"}'-d を付ければ自動で POST になるので、-X POST は書かなくても同じです。PUT や DELETE で送りたいときは -X PUT のように指定します。GET と POST の違いは「なぜGETとPOSTばかりで、PUT・PATCH・DELETEは使われにくいのか」で紹介しています。
JSON が長いときは、ファイルに書いて @ で指定すると、引用符の扱いで迷わずに済みます。
curl https://api.example.com/users -H "Content-Type: application/json" -d @user.json認証がいるAPIに送る
トークンが必要なAPIでは、Authorization ヘッダーに入れて送ります。トークンをコマンドに直接書くと、コマンドの履歴に残るので、変数に入れておくと安全です。
# トークンを変数に入れる(この端末を閉じると消える)
read -s TOKEN
curl -H "Authorization: Bearer $TOKEN" https://api.example.com/v1/meread -s は、入力した文字を画面に出さずに変数に入れます。
ファイルをダウンロードする
# 名前を指定して保存(小文字の o)
curl -L -o file.zip https://example.com/downloads/file.zip
# URLの最後の部分をそのままファイル名にする(大文字の O)
curl -L -O https://example.com/downloads/file.zipダウンロード用のURLは、別のURLへリダイレクトされることがよくあります。-L を付けないと、転送の案内だけが保存されて、中身のないファイルになります。
よく使うオプション
| オプション | 長い書き方 | すること |
|---|---|---|
-X | --request | メソッド(PUT、DELETE など)を指定する |
-H | --header | リクエストにヘッダーを付ける |
-d | --data | 送るデータ。付けると POST になる |
-i | --include | ヘッダーも表示する |
-I | --head | ヘッダーだけ表示する |
-v | --verbose | やり取りを全部表示する |
-L | --location | リダイレクトをたどる |
-o / -O | --output / --remote-name | ファイルに保存する |
-s | --silent | 進み具合の表示を消す(エラーも消えるので、-sS にするとエラーだけは出る) |
-w | --write-out | ステータスの番号などを指定した形で出す |
Windows で使うときの注意
PowerShell では curl.exe と打つ
Windows に最初から入っている PowerShell(Windows PowerShell 5.1)では、curl が別のコマンド(Invoke-WebRequest)の別名になっていて、-H などのオプションがそのままでは使えません。curl.exe と拡張子まで打つと、この記事の curl が動きます。
curl.exe -I https://example.com/コマンドプロンプト(cmd)では、curl のままで動きます。
改行と引用符の書き方が違う
この記事の例は Linux・macOS の書き方です。Windows では次のように違うので、迷ったら改行せず1行で書き、JSON は -d @ファイル名 で渡すのが確実です。
| Linux・macOS | コマンドプロンプト | PowerShell | |
|---|---|---|---|
| 行の途中で改行 | \ | ^ | `(バッククォート) |
| JSON を囲む | ' | " で囲み、中の " は \" | 書き方が複雑なのでファイルで渡す |
画面で試したいとき
リクエストを何度も変えながら試すときは、画面で操作できる Postman のようなツールのほうが楽なこともあります(「Postmanの使い方」)。curl は、結果をそのまま他のコマンドに渡したり、サーバーの上で確かめたりするときに向いています。
まとめ
- URLだけなら GET、
-dを付けると POST - ヘッダーだけなら
-I、やり取りを全部見るなら-v。リダイレクトの確認は-sIとlocation - ダウンロードは
-Lも付ける - トークンはコマンドに直接書かず、変数に入れる
- Windows PowerShell では
curl.exeと打つ。改行と引用符の書き方が違う



コメント