[PR] 本記事にはプロモーションが含まれています。

【curl】コマンドの基本と使い方|GET・POST、ヘッダーの確認、ダウンロードと、Windowsで使うときの注意

自宅サーバー構築
➔ 自宅サーバー構築メモの目次はこちら

【2026年8月19日時点の情報です】

curl(カール)は、コマンドでWebサーバーにリクエストを送り、返ってきた内容を表示する道具です。APIの動きを試したり、サーバーの設定(リダイレクトなど)を確かめたりするのに使います。この記事では、よく使う書き方と、Windows で使うときの注意をまとめます。

Linux、macOS、Windows 10(版 1803)以降には最初から入っています。入っているかは次のコマンドで確かめられます。

Bash
curl --version

ページを取得する(GET)

URLだけを書くと、GET でリクエストを送り、返ってきた中身をそのまま表示します。

Bash
curl https://api.example.com/users

ヘッダーやステータスを確かめる

中身ではなく、「どんな返事が来たか」を見たいときは、次のオプションを使います。

書き方表示するもの
curl -i URLヘッダーと中身の両方
curl -I URLヘッダーだけ(HEADリクエスト)
curl -v URL送ったものと受け取ったもののすべて(うまくいかないときの調査用)

リダイレクトを確かめる

古いURLから新しいURLへの転送がうまくいっているかは、ヘッダーのステータスと location で分かります。このブログでも、記事をまとめて転送したときにこの形で確かめています。

Bash
curl -sI https://example.com/old-page/ | grep -iE "^HTTP|^location"
Plaintext
HTTP/2 301
location: /new-page/

301 ならずっと移ったという意味で、location が転送先です。grep は Linux・macOS のコマンドなので、Windows では | grep … を外して全部のヘッダーを見ます。

ステータスの番号だけを出す

Bash
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」と伝えます。

Bash
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 が長いときは、ファイルに書いて @ で指定すると、引用符の扱いで迷わずに済みます。

Bash
curl https://api.example.com/users -H "Content-Type: application/json" -d @user.json

認証がいるAPIに送る

トークンが必要なAPIでは、Authorization ヘッダーに入れて送ります。トークンをコマンドに直接書くと、コマンドの履歴に残るので、変数に入れておくと安全です。

Bash
# トークンを変数に入れる(この端末を閉じると消える)
read -s TOKEN

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/v1/me

read -s は、入力した文字を画面に出さずに変数に入れます。

ファイルをダウンロードする

Bash
# 名前を指定して保存(小文字の 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 が動きます。

PowerShell
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 と打つ。改行と引用符の書き方が違う

コメント