curlとは何か?
curlは「Client URL」の略で、URL文法を使用してデータを送受信するCLIユーティリティです。ウェブ開発、APIテスト、CI/CD自動化、運用トラブルシューティングなど、広範な領域で使用されています。
主要機能
- 多様なプロトコル: HTTP/HTTPS, FTP/FTPS, SFTP, LDAP, SMTP/SMTPSなど(ビルドオプションによる)。
- HTTP制御: メソッド、ヘッダー、Cookie、圧縮、HTTP/2、リダイレクト、タイムアウト、再試行など、詳細な制御。
- アップロード/ダウンロード: ファイルダウンロード(-o/-O)、再開(-C -)、フォームアップロード(-F)、単一ファイルアップロード(-T)。
- セキュリティ: TLS証明書検証(デフォルトで有効)、信頼ルートの指定(--cacert)、クライアント証明書(--cert/--key)。
- 自動化への親和性: サイレント出力(-s)、失敗時の終了(-f)、書式化出力(-w)など、スクリプトに適しています。
主要オプション (Shell)
最も基本的なこととして、リクエスト対象のURLが必要です。複数のURLをスペースで区切って指定したり、ファイル(@file)から読み込むこともできます。
1. 基本的なリクエストとダウンロード
2. HTTPメソッドとデータ転送
3. ヘッダー、認証、Cookie
4. 出力制御/信頼性
5. セキュリティ/TLS & プロキシ/診断
6. プロトコル/バージョン
7. ヘルプ/バージョン
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`curl` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用シナリオの例 (Shell)
実務でよく使われるリクエストパターンを集めました。
ウェブページの内容を出力
curl https://example.com
基本的なGETリクエスト。
ファイルのダウンロード(リダイレクト追跡)
curl -O -L https://wordpress.org/latest.zip
-Oで元のファイル名、-Lでリダイレクトを追跡。
JSON GET + 整形表示
curl -s https://api.github.com/users/google | jq
jqでパース/可読性向上。
JSON POST
curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' https://api.example.com/users
ヘッダーと本文を指定。
フォームファイルアップロード (multipart)
curl -F "upload_file=@./my-image.png" https://example.com/upload
フィールド名=upload_file、ファイルパスを@で指定。
Bearerトークン認証
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/me
Authorizationヘッダーを使用。
応答ヘッダーのみ確認
curl -I https://google.com
サービスの状態/キャッシュ診断に有用。
失敗時に非ゼロ終了 + サイレント
curl -sSf https://example.com/health
-sS -fの組み合わせ: スクリプトに親和的。
タイムアウト + 再試行
curl --connect-timeout 5 --max-time 20 --retry 3 --retry-all-errors https://example.com/api
不安定なネットワークに対応。
特定のIPでテスト (--resolve)
curl --resolve 'api.example.com:443:203.0.113.10' https://api.example.com/status
DNS迂回テスト (SNI維持)。
インストール
ほとんどのシステムに標準で搭載されていますが、ない場合はパッケージでインストールします。
Debian/Ubuntu
sudo apt update && sudo apt install -y curl
RHEL/CentOS/Fedora
sudo dnf install -y curl
Arch Linux
sudo pacman -S --needed curl
ヒントと注意事項
役立つヒント
- curl vs wget: wgetは大容量/再帰的なダウンロードに強く、curlはAPI操作/詳細な制御に強いです。
- 引用符: -d/-HでJSON/特殊文字を使用する場合は、シングルクォートで囲むことを推奨します。
- 圧縮応答: --compressedを使用すると、サーバーがサポートしている場合、自動的に圧縮解除され転送量が削減されます。
- プロキシ: HTTPプロキシは-x、SOCKS5は--socks5で設定します。
- セキュリティに関する注意 (-k): -k/--insecureは開発・テスト限定での使用を推奨します。運用環境では信頼ルートの設定を推奨します(--cacert)。