はじめに
最近何故かcurlコマンドでWebサーバーの状態を確認したりする機会があったので、オプションをまとめます。普段使わないコマンドを急に使うと覚えていないので…
今回は、オプション一覧を増やしたのに加えて、「ヘッダーを確認したい」「POSTしたい」など用途別の実行例もまとめてみました。調べたいことから逆引きしてもらえればと思います。
※オプションの内容はcurlの公式マニュアル(https://curl.se/docs/manpage.html)で確認しています。例のURLは説明用のexample.comにしています。
コマンドの構文
curlコマンドの構文は下記です。
curl [オプション] [URL]オプションは複数組み合わせて使えます。「-sS」のように1文字のオプションはまとめて書くこともできます。
curlコマンドのオプション一覧
よく使うオプションを一覧にしました。「URL」の部分は実際のURLに置き換えてください。
| オプション | 説明 | 例 |
|---|---|---|
| -o, –output <file> | 指定したファイルにダウンロードしたデータを保存する | curl -o page.html URL |
| -O, –remote-name | ダウンロードしたデータを、リモートサーバー上のファイル名と同じ名前で保存する | curl -O URL/file.tar.gz |
| -C, –continue-at <offset> | 途中から転送を再開する(「-C -」で自動判定) | curl -C - -O URL |
| -I, –head | 指定したURLのヘッダー情報を取得する(HEADリクエスト) | curl -I URL |
| -i, –include | レスポンスヘッダーも本文と一緒に表示する | curl -i URL |
| -s, –silent | 進捗やエラーメッセージを表示しない | curl -s URL |
| -S, –show-error | -sと組み合わせて、エラーだけは表示する | curl -sS URL |
| -v, –verbose | curlの詳細な出力(送受信のヘッダーなど)を表示する | curl -v URL |
| -w, –write-out <format> | 転送後にステータスコードや時間などを表示する | curl -w '%{http_code}' URL |
| -H, –header <header> | リクエストにヘッダーを付加する | curl -H 'Accept: application/json' URL |
| -A, –user-agent <name> | User-Agentを指定する | curl -A 'MyClient/1.0' URL |
| -e, –referer <URL> | リファラーを指定する | curl -e https://example.com/ URL |
| -X, –request <method> | リクエストのメソッドを指定する | curl -X DELETE URL |
| -d, –data <data> | POSTリクエストでデータを送信する | curl -d 'a=1&b=2' URL |
| –data-urlencode <data> | URLエンコードしてデータを送信する | curl --data-urlencode 'q=日本語' URL |
| –json <data> | JSONをPOSTする(Content-Typeなどを自動で付ける。curl 7.82.0以降) | curl --json '{"a":1}' URL |
| -F, –form <name=content> | multipart/form-dataで送信する(ファイルアップロード) | curl -F 'file=@a.txt' URL |
| -G, –get | -dのデータをクエリ文字列としてGETで送る | curl -G -d 'q=curl' URL |
| -T, –upload-file <file> | ファイルをアップロードする(HTTPではPUT) | curl -T a.txt URL/ |
| -u, –user <user:password> | 認証情報を付加する(Basic認証など) | curl -u user URL |
| -c, –cookie-jar <file> | クッキー情報をファイルに保存する | curl -c cookie.txt URL |
| -b, –cookie <data|file> | リクエストにクッキーを付加する(ファイルも指定可) | curl -b cookie.txt URL |
| -L, –location | リダイレクトを追跡する | curl -L URL |
| –max-redirs <num> | 追跡するリダイレクトの最大回数を指定する | curl -L --max-redirs 5 URL |
| -k, –insecure | SSL証明書の検証をスキップする(検証用途のみ) | curl -k URL |
| -m, –max-time <seconds> | 転送全体の最大時間を指定する | curl -m 10 URL |
| –connect-timeout <seconds> | 接続までの最大時間を指定する | curl --connect-timeout 5 URL |
| –retry <num> | 一時的なエラーのときに再試行する回数を指定する | curl --retry 3 URL |
| -f, –fail | HTTPステータスが400以上のとき、本文を出さずにエラー(終了コード22)にする | curl -f URL |
| -x, –proxy <[protocol://]host[:port]> | プロキシを経由する | curl -x http://proxy.example.com:8080 URL |
| –compressed | 圧縮されたレスポンスを要求し、展開して表示する | curl --compressed URL |
用途別の実行例
ヘッダー情報を確認する
Webサーバーの状態を確認したいときに一番使うのがこれです。「-I」でヘッダーだけを取得できます。
curl -I https://example.com/本文も一緒に見たいときは「-i」を使います。送ったリクエストのヘッダーまで見たいときは「-v」が便利です。
# レスポンスヘッダー+本文
curl -i https://example.com/
# 送受信の詳細を表示
curl -v https://example.com/ステータスコードだけを表示する
死活確認などでステータスコードだけ欲しいときは、本文を「-o /dev/null」で捨てて、「-w」で表示します。
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/
# 応答時間も一緒に見る
curl -s -o /dev/null -w '%{http_code} %{time_total}\n' https://example.com/ファイルをダウンロードする
# 名前を付けて保存
curl -o sample.html https://example.com/
# サーバー上のファイル名のまま保存
curl -O https://example.com/files/sample.tar.gz
# 途中で切れたダウンロードを再開
curl -C - -O https://example.com/files/sample.tar.gzリダイレクトを追跡する
curlはデフォルトではリダイレクトを追いかけません。httpからhttpsへの転送などを確認するときは「-L」を付けます。
curl -L https://example.com/
# 最後にたどり着いたURLを表示
curl -sL -o /dev/null -w '%{url_effective}\n' http://example.com/POSTでデータを送信する
「-d」を付けると自動的にPOSTになります(Content-Typeはapplication/x-www-form-urlencoded)。
# フォーム形式で送信
curl -d 'name=sample&lang=ja' https://example.com/api
# JSONを送信
curl -H 'Content-Type: application/json' -d '{"name":"sample"}' https://example.com/api
# curl 7.82.0以降なら--jsonで短く書ける
curl --json '{"name":"sample"}' https://example.com/apiファイルをフォームで送るときは「-F」、PUTやDELETEなど他のメソッドを使うときは「-X」で指定します。
curl -F 'file=@./sample.txt' https://example.com/upload
curl -X DELETE https://example.com/api/items/1認証付きでアクセスする
Basic認証は「-u」で指定します。パスワードを省略するとプロンプトで聞かれるので、コマンド履歴に残したくないときはこちらがおすすめです。
# パスワードは対話的に入力
curl -u user https://example.com/private/
# トークンをヘッダーで渡す場合
curl -H 'Authorization: Bearer <トークン>' https://example.com/apiタイムアウトを設定する
応答がないサーバーに対して待ち続けないように、時間を区切っておくと安心です。「–connect-timeout」は接続まで、「-m」は転送全体の制限です。
curl --connect-timeout 5 -m 10 https://example.com/
# 失敗したら3回まで再試行
curl --retry 3 https://example.com/スクリプトで使う
シェルスクリプトで使うときは「-f」でHTTPエラーを終了コードにし、「-sS」で進捗は消してエラーだけ表示するのがよくある組み合わせです。
if curl -fsS -o /dev/null https://example.com/; then
echo "OK"
else
echo "NG"
fiクッキーを使う
# ログイン時のクッキーを保存
curl -c cookie.txt -d 'user=sample' https://example.com/login
# 保存したクッキーを付けてアクセス
curl -b cookie.txt https://example.com/mypageおわりに
curlはオプションがとても多いので全部は覚えられないですが、「-I」「-v」「-L」「-w」あたりを覚えておくと、Webサーバーの状態確認はだいたいできると思います。
ここにないオプションは「curl –help all」や公式マニュアルで確認してみてください。

コメント