CreaTools LogoCreaTools
Tips

curl コマンドの使い方完全ガイド|API・ファイル取得・POST送信の実例集

2026-06-03

結論:この4つを覚えれば9割いける

curl https://example.com                 # GET(中身を表示)
curl -O https://example.com/file.zip      # ファイルとして保存
curl -X POST -d 'key=value' URL           # POST送信
curl -H "Authorization: Bearer xxx" URL   # ヘッダー付き

残りはオプションの組み合わせだけ。


即決チェック表

やりたいことコマンド
URLの中身を表示curl URL
ファイルとして保存curl -O URL
名前を指定して保存curl -o name.html URL
レスポンスヘッダーも見るcurl -i URL
ヘッダーだけ見るcurl -I URL
リダイレクトを追うcurl -L URL
POSTでデータ送信curl -X POST -d 'a=1' URL
JSONを送るcurl -H "Content-Type: application/json" -d '{...}' URL
認証ヘッダーを付けるcurl -H "Authorization: Bearer TOKEN" URL
進捗を消して結果だけcurl -s URL

このまま貼って使える。


基本:GET リクエスト

curl https://example.com

レスポンスボディが標準出力に流れる。HTMLでもJSONでもそのまま表示される。

中身が長いときはページャに渡す

curl -s https://api.example.com/data | less

-s(silent)で進捗バーを消すのがポイント。パイプに渡すときは必須級。


ファイルを保存する:-O-o

# サーバー側のファイル名で保存(file.zip になる)
curl -O https://example.com/file.zip

# 自分で名前を決めて保存
curl -o myfile.zip https://example.com/file.zip
オプション挙動
-O(大文字)URLの末尾をファイル名にする
-o name(小文字)指定した名前で保存

⚠️ 混同注意。 大文字小文字で全く別の動きをする。


ヘッダーを確認する:-i-I

# ボディ + レスポンスヘッダー
curl -i https://example.com

# ヘッダーだけ(HEADリクエスト)
curl -I https://example.com

ステータスコードやリダイレクト先を確認したいときに使う。

HTTP/2 200
content-type: text/html; charset=UTF-8
cache-control: max-age=3600

ステータスコードの意味は HTTPステータスコード一覧 を参照。


リダイレクトを追う:-L

# ✗ 301/302 が返ると中身が表示されない
curl https://example.com/old

# ✓ リダイレクト先まで追跡する
curl -L https://example.com/old

http://https:// に飛ばすサイトや短縮URLでは -L が必須。「中身が空っぽ」のときはまずこれを疑う。


POST でデータを送る

フォーム形式(application/x-www-form-urlencoded)

curl -X POST \
  -d 'name=taro' \
  -d 'age=20' \
  https://api.example.com/users

-d を使うと自動的に POST になるので、実は -X POST は省略できる。

JSON を送る

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"name":"taro","age":20}' \
  https://api.example.com/users

JSONのときは Content-Type ヘッダーを忘れると 415 エラーになりやすい。

ファイルの中身を送る

curl -X POST \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://api.example.com/users

-d @ファイル名 でファイルの中身をそのまま送れる。長いJSONはこれが楽。


ヘッダーを付ける:-H

# 認証トークン
curl -H "Authorization: Bearer eyJhbGc..." https://api.example.com/me

# 複数指定もOK
curl \
  -H "Authorization: Bearer TOKEN" \
  -H "Accept: application/json" \
  https://api.example.com/me

API を叩くときの定番。-H は何個でも並べられる。


認証

Basic認証

curl -u username:password https://example.com/secret

トークン認証(推奨)

curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/data

⚠️ パスワードやトークンを直書きするとシェルの履歴(.bash_history)に残る。本番運用では環境変数を使う:

curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com/data

よく使うオプション一覧

オプション意味
-s進捗バー・エラーを非表示(silent)
-S-s でもエラーは表示(show error)
-Lリダイレクトを追う
-iレスポンスヘッダーも表示
-Iヘッダーのみ(HEAD)
-o fileファイル名を指定して保存
-OURL末尾の名前で保存
-Hヘッダーを追加
-dPOSTデータ(自動でPOSTになる)
-Xメソッドを明示(GET/POST/PUT/DELETE)
-uBasic認証
-kSSL証明書の検証をスキップ
-w結果のフォーマット出力
--max-timeタイムアウト秒数

-s -S はセットで覚えると便利。**「普段は静か、エラーだけ出す」**が作れる。


実務でハマるポイント

1. JSONを送ったのに受け取れない

# ✗ Content-Type がないとサーバーがJSONと認識しない
curl -X POST -d '{"a":1}' URL

# ✓ ヘッダーを付ける
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' URL

2. 中身が表示されない=リダイレクト

-L を付ける。前述のとおり301/302で起きる典型パターン。

3. シングルクォートとダブルクォートの罠

# ✗ 変数が展開されない(シングルクォート)
curl -H 'Authorization: Bearer $TOKEN' URL

# ✓ 変数を展開したいならダブルクォート
curl -H "Authorization: Bearer $TOKEN" URL

JSONの " とシェルの展開がぶつかるときは、外をシングル・中をダブルにすると衝突しない。

4. SSL証明書エラー

curl: (60) SSL certificate problem

検証を飛ばすには -k。ただし中間者攻撃のリスクがあるので、開発環境の自己署名証明書に限定すること。本番では証明書を正しく設定する。


デバッグに効くオプション

通信の中身を全部見る:-v

curl -v https://example.com

送信ヘッダー(>)と受信ヘッダー(<)が全部出る。APIが期待通り叩けているか確認するときの最強オプション。

ステータスコードと所要時間だけ取る:-w

curl -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://example.com
# → 200 0.342s
  • -o /dev/null でボディを捨てる
  • -w で欲しい情報だけ取り出す

監視スクリプトでよく使う形。


実用スニペット集

APIの疎通確認(ヘルスチェック)

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/health
# 200 以外なら異常

タイムアウトを設定して固まらないようにする

curl --max-time 10 https://slow.example.com

ダウンロードの再開(中断したファイルの続き)

curl -C - -O https://example.com/big.zip

-C - で途中から再開できる。大きいファイルで回線が切れたときに。

POST結果を整形して見る(jq併用)

curl -s https://api.example.com/users | jq .

JSON APIのレスポンス確認はこれが鉄板。


curl と wget の違い

観点curlwget
得意なことAPI操作・リクエスト全般ファイルダウンロード
標準出力デフォルトで標準出力デフォルトでファイル保存
再帰ダウンロード不可可能(-r
プロトコル対応非常に多いHTTP/HTTPS/FTP中心

APIを叩く・細かいリクエストを作るなら curl。 サイトを丸ごと落とすなら wget。


まとめ

やることコマンド
中身を見るcurl URL
保存するcurl -O URL
POST送信curl -X POST -d 'a=1' URL
ヘッダー付きcurl -H "..." URL
デバッグcurl -v URL

-d を付けたら自動でPOST。Content-Type を忘れない。 中身が空なら -L、固まるなら --max-time


関連記事