Linux の curl コマンド は、指定した URL からデータを取得(ダウンロード)したり、
URL に対してHTTP リクエストを送信するためのコマンドです。
HTTP/HTTPS だけでなく、FTP やその他のプロトコルにも対応しており、Web サイトや API の動作確認、ファイルダウンロードなどで頻繁に使われます。
取得したコンテンツは標準出力に表示されるため、他のコマンドとパイプで組み合わせることも簡単です。
Web サーバの運用や REST API のテストに関わるエンジニアにとって、必須のコマンドといえます。
curl [オプション] URL...
複数の URL を指定して順にアクセスすることもできます。
オプションで HTTP メソッド(GET/POST/PUT など) や リクエストヘッダ、タイムアウト などを細かく指定できます。
・URL の内容をダウンロードして標準出力に表示する。
curl https://www.sooota.com/
最も基本的な使い方です。
指定した URL のレスポンスボディをそのまま標準出力に表示します。
HTML の中身をざっと確認したいときなどに使えます。
・ダウンロードした内容をファイルに保存する(ファイル名を指定)。
curl -L -f -o sooota_test.html https://www.sooota.com/
-o ファイル名 で保存先ファイル名を指定できます。
-L はリダイレクトを自動的にたどるオプション、-f は HTTP エラー時に終了ステータスで失敗を返すオプションです。
ダウンロードが成功したかスクリプトから判定したい場合に便利です。
・サーバからのレスポンスヘッダだけを確認する。
curl -I https://www.sooota.com/
-I オプションで、HEAD リクエストを送りHTTP ヘッダのみを表示します。
ステータスコードやサーバ種別、リダイレクト先などを確認したいときに使います。
・詳細な通信情報(リクエスト/レスポンス)を表示する。
curl -v https://www.sooota.com/
-v オプションは verbose モードで、送受信されるヘッダなど詳細な情報を表示します。
SSL のハンドシェイクやリダイレクトの様子など、トラブルシュート時に役立ちます。
・標準出力へは何も表示せず、ファイルにだけ保存する。
curl -sS -o index.html https://www.sooota.com/
-s は進捗バーなどを表示しないサイレントモード、-S はエラー時のみメッセージを表示します。
スクリプトから実行するときなど、不要な出力を抑えたい場面で使います。
・HTTP ヘッダを追加してリクエストを送る(ユーザーエージェントなど)。
curl -H "User-Agent: sooota-test-client" https://www.sooota.com/
-H オプションで任意の HTTP ヘッダを追加できます。
認証トークン(Authorization ヘッダ)や API キー、カスタムヘッダを付けて API をテストしたいときに利用します。
・POST メソッドでフォームデータを送信する。
curl -X POST -d "name=sooota&mode=test" https://example.com/api
-X で HTTP メソッドを指定し、-d で送信するデータを指定します。
-d を付けると自動的に Content-Type: application/x-www-form-urlencoded が設定され、POST リクエストとして送信されます。
・JSON データを POST する(API テストなど)。
curl -X POST -H "Content-Type: application/json" -d '{"id":1,"name":"sooota"}' https://example.com/api
JSON を送る場合は Content-Type ヘッダを明示し、-d の中身を JSON 形式にします。
REST API の動作確認や、フロントエンドなしでバックエンドだけテストしたいときに非常に便利です。
・URL からファイル名を自動的に使って保存する。
curl -O https://example.com/files/report.csv
-O オプションは、URL の末尾にあるファイル名(ここでは report.csv)をそのまま使って保存します。
複数ファイルをダウンロードするときにも使いやすいオプションです。
・自己署名証明書の HTTPS サイトにアクセスする(検証を無効化)。
curl -k https://self-signed.example.com/
-k オプションは、SSL 証明書の検証エラーを無視して接続します。
検証環境などでどうしても必要な場合にのみ使用し、本番環境ではむやみに使わないよう注意が必要です。
・Web サイト/API の疎通確認
アプリケーションの不具合かネットワークの問題か切り分けたいときに、
ブラウザを介さずに curl で直接リクエストを送ることで、サーバ側のレスポンスを素早く確認できます。
・REST API のテスト・デバッグ
curl でヘッダや JSON ボディを自由に指定できるため、
Postman などのツールを使う前の軽いテストや、CI のスクリプト内での API テストに向いています。
・cron からの定期実行
crontab と組み合わせて、
「監視用のエンドポイントを一定間隔で叩く」「外部サービスの API を定期的に呼び出す」などの自動処理にもよく使われます。
・ファイルダウンロードの自動化
レポート CSV やバックアップファイルなどを curl でダウンロードし、
そのままシェルスクリプトに組み込むことで、手作業を減らしたバッチ処理を構築できます。
| short option | long option | description |
|---|---|---|
| -o | --output | ダウンロードした内容を指定したファイル名で保存する |
| -O | --remote-name | URL のファイル名をそのまま使って保存する |
| -L | --location | HTTP リダイレクトを自動的にたどってアクセスする |
| -f | --fail | HTTP エラー(4xx/5xx)のとき本文を出力せず終了ステータスで失敗を返す |
| -s | --silent | 進捗メッセージなどを表示しないサイレントモードにする |
| -S | --show-error | サイレントモード時にエラーが発生した場合のみエラーメッセージを表示する |
| -I | --head | HEAD リクエストを送りレスポンスヘッダのみを取得する |
| -v | --verbose | 送受信ヘッダなど詳細な通信情報を表示する |
| -k | --insecure | SSL 証明書の検証エラーを無視して接続する |
| -H | --header | 任意の HTTP ヘッダを追加してリクエストを送信する |
| -d | --data | POST リクエストの本文として送信するデータを指定する(application/x-www-form-urlencoded) |
| -X | --request | 使用する HTTP メソッド(GET/POST/PUT など)を明示的に指定する |
| -u | --user | HTTP 認証で使用するユーザー名とパスワードを指定する(user:password 形式) |
| --data-json | JSON データを POST する際に Content-Type: application/json を付与して送信する | |
| --compressed | サーバから圧縮されたレスポンスを受け取り自動的に展開する | |
| --limit-rate | ダウンロードやアップロードの転送速度の上限を指定する(例: --limit-rate 1M) | |
| --max-time | リクエスト全体に許可される最大時間(秒)を指定する |
ここではよく使うオプションのみを表にまとめています。
サポートしているプロトコルやすべてのオプションについては、公式のマニュアルを参照してください。
より詳細な情報は、Linux の
curl マニュアルページ(英語)
や、各種ドキュメントもあわせて確認すると良いでしょう。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
