curl
| 対応: | 全Linux | |
|---|---|---|
| macOS(2001 Cheetah) | ||
| Bash 1.0(1989) |
『curl』はコマンドラインから HTTP/HTTPS リクエストを送受信するツールです。Web API の呼び出し・ファイルのダウンロード・フォームデータの送信など幅広い用途に使えます。
構文
基本的な GET リクエストを送信します。
curl URL
ファイルに保存します。
curl -o 出力ファイル URL
URL と同じファイル名で保存します。
curl -O URL
リダイレクトに追従します。
curl -L URL
POST リクエストでフォームデータを送信します。
curl -X POST -d "key=value&key2=value2" URL
POST リクエストで JSON を送信します。
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' URL
ヘッダーを追加します。
curl -H "Authorization: Bearer トークン" URL
オプション一覧
| オプション | 概要 |
|---|---|
| -o ファイル | レスポンスボディを指定ファイルに保存します。 |
| -O | URL のファイル名でカレントディレクトリに保存します。 |
| -L | リダイレクト(301/302)に追従します。 |
| -s | 進捗やエラーを表示しないサイレントモードです。 |
| -S | -s と組み合わせてエラーだけ表示します。 |
| -w "%{http_code}" | HTTPステータスコードなどのフォーマット出力を追加します。 |
| -X メソッド | HTTP メソッドを指定します(GET, POST, PUT, DELETE 等)。 |
| -H "ヘッダー" | リクエストヘッダーを追加します。 |
| -d "データ" | POST のボディデータを指定します。 |
| -F "field=value" | multipart/form-data 形式でデータを送ります。 |
| -u ユーザー:パスワード | Basic 認証の認証情報を指定します。 |
| -I | レスポンスヘッダーのみ取得します(HEAD リクエスト)。 |
| -v | 詳細なリクエスト/レスポンスを表示します(デバッグ用)。 |
| --max-time 秒 | タイムアウト時間を指定します。 |
| -k | SSL 証明書の検証をスキップします(開発環境向け)。 |
サンプルコード
シンプルな GET リクエストを送信します。レスポンスボディが標準出力に表示されます。
curl "https://wp-p.info/sandbox/api.php?series=like_a_dragon&id=1"
{
"status": "ok",
"series": "like_a_dragon",
"title": "龍が如く",
"character": {
"id": 1,
"name": "桐生一馬",
"age": 37,
"team": "堂島組",
"email": "kiryu_kazuma@wp-p.info",
"bgm": "ばかみたい"
}
}
HTTP ステータスコードだけを確認します。『-s』でサイレントモード、『-o /dev/null』でボディを破棄します。
curl -s -o /dev/null -w "%{http_code}" https://example.com
200
レスポンスヘッダーを確認します(『-I』で HEAD リクエスト)。
curl -I https://example.com HTTP/2 200 content-type: text/html; charset=UTF-8 content-length: 12345 last-modified: Thu, 01 Jan 2026 00:00:00 GMT
JSON データを POST で送信します。Bearer トークンによる認証付きです。
sample_post_json.sh
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer my_token_here" \
-d '{"name":"桐生一馬","age":37}' \
https://wp-p.info/sandbox/api.php
実行するコマンドは次の通りです。
bash sample_post_json.sh
{
"status": "ok",
"message": "データを受信しました。",
"method": "POST",
"received": {
"name": "桐生一馬",
"age": 37
}
}
ファイルをダウンロードします。『-L』でリダイレクトに追従し、『-sS』でエラーだけ表示します。
curl -sSL -o /tmp/file.tar.gz https://example.com/release.tar.gz
ファイルをアップロードします(multipart/form-data)。
curl -F "file=@report.pdf" -F "title=レポート" https://example.com/upload
Basic 認証を使ってアクセスします。
curl -u admin:password https://example.com/admin/api
レスポンスを変数に格納して処理します。
sample_fetch_user.sh
response=$(curl -s "https://wp-p.info/sandbox/api.php?series=like_a_dragon&id=1") echo "$response" | grep "name"
実行するコマンドは次の通りです。
bash sample_fetch_user.sh
"name": "桐生一馬",
概要
スクリプトで『$ curl』を使うときは『-s』(サイレント)と『-S』(エラーだけ表示)を組み合わせた『-sS』オプションが定番です。また『-w "%{http_code}"』でステータスコードを確認し、200 以外はエラー処理するパターンも頻出です。
『-k』(SSL検証スキップ)は証明書エラーの開発時確認などに使われますが、本番環境では証明書の検証を有効にするのが一般的です。ファイルのダウンロードには wget も便利です。
よくあるミス
よくあるミス1: -o を指定しないとファイルが保存されない
curl はデフォルトで標準出力に結果を出力します。ファイルに保存するには『-O』または『-o』が必要です。
curl https://example.com/file.zip (内容がターミナルに出力されるだけで保存されない)
大文字の『-O』を使うと URL のファイル名で保存されます。名前を指定するには小文字の『-o』を使います。
curl -O https://example.com/file.zip curl -o myfile.zip https://example.com/file.zip
よくあるミス2: リダイレクトを追わずに 301/302 で止まる
URL がリダイレクトされている場合、curl はデフォルトでリダイレクト先を追いません。
curl https://example.com/old-path (空のレスポンスや HTML の Location ヘッダーが返る)
リダイレクトを追うには『-L』を付けます。
curl -L https://example.com/old-path
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。