curl オプション一覧|目的別の使い方と実行例まとめ

コマンドリファレンス

curlオプションを使うと、出力先の指定、POSTデータの送信、認証、ヘッダー操作、通信のタイムアウトやリトライなど、リクエストの挙動を細かく制御できます。この記事では curl オプションを「出力・保存」「リクエスト・データ送信」「ヘッダー・認証」「通信制御」「アップロード・その他」の目的別に整理し、それぞれの使用例までまとめて解説します。基本構文やインストール方法、よくあるエラーの対処法もあわせて確認できます。

curl とは

curl(Client for URLs)は、コマンドラインから URL 相手に HTTP, HTTPS, FTP, SFTP, SCP などのプロトコルで通信するツールです。ブラウザのように画面表示は行わず、レスポンス本文やヘッダーをそのまま標準出力やファイルへ出力します。オプションを組み合わせることで、Web API の疎通確認、ファイルのダウンロード・アップロード、フォームデータの送信、シェルスクリプトや CI/CD パイプラインへの組み込みなど幅広い用途に対応できます。

macOS・多くの Linux ディストリビューションには標準でインストールされており、追加設定なしですぐに使い始められます。

基本構文(Syntax)

curl [オプション] [URL...]

オプションを省略すると、URL に対して GET リクエストを送信し、レスポンス本文を標準出力に表示します。オプションは複数同時に指定でき、curl -sL -o out.html https://example.com のように短縮形をまとめて書くことも可能です。

curl https://example.com

curl オプション一覧(目的別)

curl のオプションは数十種類ありますが、実務でよく使うものは「出力・保存」「リクエスト・データ送信」「ヘッダー・認証」「通信制御」「アップロード・その他」の5つに分類すると把握しやすくなります。

出力・保存に関するオプション

オプション説明使用例
-o FILE出力先ファイルを指定curl -o index.html https://example.com
-OURL のファイル名で保存curl -O https://example.com/file.zip
-IHTTP ヘッダのみ取得curl -I https://example.com
-D FILE受信したヘッダーをファイルに保存curl -D headers.txt https://example.com
-s進行状況やエラーを非表示 (silent)curl -s https://example.com
-v詳細な通信ログを表示 (verbose)curl -v https://example.com
-w FORMAT完了後に指定した書式で情報を出力(ステータスコードや所要時間など)curl -o /dev/null -s -w "%{http_code}\n" https://example.com

リクエスト・データ送信に関するオプション

オプション説明使用例
-X METHODHTTP メソッドを指定 (GET/POST/PUT/DELETE など)curl -X POST https://example.com/api
-d DATAPOST データを送信curl -d "user=alice&pass=1234" https://example.com/login
-F NAME=CONTENTmultipart/form-data でファイル等を送信curl -F "file=@report.csv" https://example.com/upload
-G-d のデータを URL クエリとして GET 送信curl -G -d "q=curl" https://example.com/search
--data-urlencode DATAパラメータを URL エンコードして送信curl --data-urlencode "q=検索 語" -G https://example.com/search

ヘッダー・認証に関するオプション

オプション説明使用例
-H HEADER追加の HTTP ヘッダを送信curl -H "Authorization: Bearer TOKEN" https://example.com/api
-u USER:PASSBasic認証でアクセスcurl -u alice:secret https://example.com
-A AGENTUser-Agent を偽装curl -A "Mozilla/5.0" https://example.com
-b DATACookie を送信curl -b "session=abc123" https://example.com
-c FILE受信した Cookie をファイルに保存curl -c cookies.txt https://example.com/login
-e URLReferer ヘッダーを指定curl -e "https://example.com/" https://example.com/api

通信制御に関するオプション

オプション説明使用例
-Lリダイレクトを追跡curl -L http://example.com
-C -中断したダウンロードを再開curl -C - -O https://example.com/file.zip
--limit-rate RATE転送速度を制限curl --limit-rate 100k https://example.com/file.zip
--max-time SEC全体のタイムアウト秒数を指定curl --max-time 5 https://example.com
--retry N失敗時のリトライ回数を指定curl --retry 3 https://example.com
-x [protocol://]host:portプロキシ経由でアクセスcurl -x http://proxy.local:8080 https://example.com
-kSSL 証明書の検証を無効化curl -k https://selfsigned.local

アップロード・その他のオプション

オプション説明使用例
-T FILEファイルをアップロード(PUT)curl -T local.txt https://example.com/upload/local.txt
-fHTTPエラー時に本文を表示せず異常終了させるcurl -f https://example.com/notfound

-k は証明書検証をスキップするための一時的な確認用オプションです。本番運用や機密情報を扱う通信では使わないようにします。

よく使うオプションの組み合わせ例

ステータスコードだけを確認する

-o でレスポンス本文を捨て、-w でステータスコードのみ出力します。ヘルスチェックスクリプトなどでよく使う組み合わせです。

curl -s -o /dev/null -w "%{http_code}\n" https://example.com

サーバのレスポンスヘッダを確認

curl -I https://example.com

出力例:

HTTP/1.1 200 OK
Date: Wed, 21 Aug 2024 12:34:56 GMT
Content-Type: text/html; charset=UTF-8

JSON API にリクエスト

curl -H "Content-Type: application/json" \
     -d '{"user":"alice","pass":"1234"}' \
     https://example.com/api/login

レスポンスの JSON を整形して読みたい場合は jq コマンドと組み合わせます。curl と jq を使った ChatGPT API 連携の実例はbashでChatGPT APIを使う方法で解説しています。

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

Basic認証を使ってアクセス

curl -u alice:password https://example.com/secure

Cookie を送受信する

ログイン状態を維持したまま複数リクエストを送る場合は、-c で Cookie を保存し、次のリクエストで -b を使って読み込みます。

curl -c cookies.txt -d "user=alice&pass=1234" https://example.com/login
curl -b cookies.txt https://example.com/mypage

ファイルをアップロード

-T は主に FTP/SFTP や PUT に対応したエンドポイントへのアップロードに使い、-F はフォーム経由のファイルアップロード(multipart/form-data)に使います。

curl -T report.csv https://example.com/upload/report.csv
curl -F "file=@report.csv" https://example.com/upload

ダウンロードを途中から再開

curl -C - -O https://example.com/largefile.iso

タイムアウトとリトライを設定

不安定な回線やスクリプトからの自動実行では、応答が返らないまま処理が止まらないようタイムアウトとリトライを併用します。

curl --max-time 10 --retry 3 https://example.com/api/health

エラー例(存在しないページ)

curl は既定では 404 などの HTTP エラーが返っても、そのままレスポンス本文を表示して正常終了します。スクリプトで失敗を検知したい場合は -f(fail)を付けます。

curl -f https://example.com/notfound

出力例:

curl: (22) The requested URL returned error: 404

インストール・動作確認

まずはインストール状況とバージョンを確認します。

curl --version

コマンドが見つからない場合は、環境に応じて次の方法でインストールします。

環境インストール方法
Ubuntu / Debian系sudo apt install curl
RHEL / CentOS / Amazon Linuxsudo yum install curl(または dnf install curl
macOS標準搭載。最新版が必要な場合は brew install curl
WindowsWindows 10 (1803) 以降は標準搭載。無い場合は curl.se/windows から入手

macOS へのパッケージ導入手順は brew コマンドの記事もあわせて参照してください。

よくあるエラーと対処法

エラーメッセージ主な原因対処法
curl: command not foundcurl 未インストール「インストール・動作確認」の手順でインストールする
curl: (6) Could not resolve hostDNS が名前解決できないURL のスペルミス確認、ping コマンドで名前解決自体を確認する
curl: (7) Failed to connectポートが閉じている・サーバがダウンファイアウォールやサーバの起動状態を確認する
curl: (28) Operation timed out応答がなくタイムアウト--max-time を延長するか、サーバ側の負荷・回線を確認する
curl: (35) SSL connect errorSSL/TLS のバージョン不一致・証明書不備curl のバージョンを更新する。自己署名証明書の検証時のみ -k を使う
curl: (60) SSL certificate problem証明書チェーンを検証できないルート証明書を最新化する。検証を無効化する -k は動作確認用途に限定する

curl と wget の違い

ファイルダウンロード用途では wget コマンドもよく使われます。用途に応じて使い分けます。

観点curlwget
対応プロトコルHTTP/HTTPS/FTP/SFTP/SCP など多数主に HTTP/HTTPS/FTP
得意な用途API 通信・任意のHTTPメソッド・ヘッダー操作ファイルの一括・再帰ダウンロード
出力先の既定標準出力ファイルに保存
再帰ダウンロード非対応-r で対応
ライブラリとしての利用libcurl として多言語から利用可能非対応

「API を叩く・レスポンスヘッダーを見る・POSTでデータを送る」なら curl、「サイトのファイル一式をまとめて取得する」なら wget が適しています。

よくある質問

curl のオプションはどれくらいありますか?

curl --help all で確認できるだけでも200種類近くあります。ただし実務でよく使うのは「curl オプション一覧(目的別)」で紹介した20個前後で、まずはこの範囲を覚えれば大半のケースに対応できます。

複数のオプションを同時に指定できますか?

指定できます。curl -sL -o out.html https://example.com のように、引数を取らない短縮オプションはまとめて書けます。-o-H のように値を伴うオプションは個別に指定してください。

curl コマンドが使えない場合はどうすればいいですか?

curl --version を実行してインストール状況を確認します。見つからない場合は「インストール・動作確認」の章の手順でインストールしてください。

curl と wget はどちらを使うべきですか?

API通信やヘッダー確認、POST送信であれば curl、ファイルの一括・再帰ダウンロードであれば wget が向いています。詳細は「curl と wget の違い」を参照してください。

SSL証明書エラーが出るときはどうすればいいですか?

まずは curl 自体とルート証明書を最新化してください。自己署名証明書に対する動作確認に限り -k で検証を一時的にスキップできますが、本番通信には使用しないでください。

関連コマンド

  • wget : ファイルダウンロード専用のコマンド
  • jq : curl で取得した JSON レスポンスの整形・抽出
  • scp / sftp : SSH 経由でファイルを転送
  • ssh : リモートホストへの接続
  • ftp : FTP プロトコルによるファイル転送
  • ping : ネットワーク疎通確認

コマンド全体を俯瞰したい場合は linux コマンド一覧もあわせて確認してください。

備考

  • curl は非常に多機能で、FTP/SFTP でのファイル操作、SMTP を使ったメール送信、WebSocket の簡易確認などにも利用可能です。
  • SSL 証明書の検証はデフォルトで有効になっています。自己署名証明書を扱う場合は -k を付ける必要があります。
  • API テストやスクリプト内でのデータ送受信において、curl は最も広く利用されるツールの一つです。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント