curlコマンドの -d オプションの使い方ガイド|POST送信・JSON・Webhook対応まで解説 #
初めに #
curl コマンドは、HTTPリクエストを CLI から柔軟に送信できる非常に強力なツールです。
REST APIのテストやエンドポイントの確認に利用できることからアプリケーションエンジニアが日常的に使うツールというイメージが強いかもしれません。
しかし、インフラエンジニアにとっても curl コマンドは非常に有用であり、次のような場面で活用する事ができます。
- HTTPステータスコードやレスポンスヘッダーの確認
- 通信の疎通チェック
- 簡易的な負荷テスト
- セキュリティチェックなどの動作確認
curl には、接続制御・ヘッダー操作・出力整形など、用途に応じた多彩なオプションが用意されています。
例えば、Webフォームの送信を再現したいときや、JSON形式のデータをAPIに投げたいときなど、そうした場面では、-d オプションを使うことで柔軟に対応できます。
そこで本記事では、curl の -d オプションに焦点を当て、基本的な使い方から実践的な活用方法までを、具体例とともに解説していきます。
基本的な使い方 #
curlコマンドの基本的な使い方は以下の通りです。
curl [オプション] [URL]
何もオプションを付けずにURLを指定した場合、そのURLのデータ(多くの場合HTMLコンテンツ)が標準出力に表示されます。
curl http://example.com
このように、ブラウザを使わずにコマンドラインから直接HTTPリクエストを送信し、そのレスポンスを表示できるのがcurlの基本的な使い方となります。
以下は curl の公式リポジトリとなっております。
A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features
-hでオプションを表示する #
-h オプションは多くのコマンドで「ヘルプ表示(使い方ガイド)」として利用されています。
curlコマンドでも同様に、以下のように実行することで利用可能な全オプションの一覧を確認できます。
curl -h
以下は主なオプション一覧となっております。
ご利用の curl のバージョンやディストリビューションによって、一部のオプションが存在しない、または動作が異なる場合があります。
詳細はご利用環境の curl --help または man curl をご確認ください。
| オプション | ロングオプション | 説明 |
|---|---|---|
-d |
--data |
HTTP POST データを送信する |
--data-urlencode |
URLエンコードされたデータを送信 | |
-H |
--header |
任意のHTTPヘッダーを付加する |
-X |
--request |
使用するHTTPメソッドを指定 |
-L |
--location |
リダイレクトを追跡 |
-i |
--include |
レスポンスヘッダーを出力に含める |
-o |
--output |
出力をファイルに保存する |
-u |
--user |
認証情報(ユーザー名:パスワード)を送信 |
-k |
--insecure |
サーバー証明書の検証を無効化(HTTPS) |
-s |
--silent |
プログレスバーやエラーを表示しない |
-v |
--verbose |
詳細な通信内容を表示(デバッグ用) |
--compressed |
サーバーに圧縮レスポンスを要求 | |
-A |
--user-agent |
User-Agent を指定 |
-F |
--form |
multipart/form-data形式で送信(ファイルアップロード等) |
-T |
--upload-file |
ファイルをアップロード |
-b |
--cookie |
Cookie を送信 |
-c |
--cookie-jar |
Cookie を保存 |
--cert |
クライアント証明書を指定 | |
--key |
SSL/TLS用の秘密鍵ファイルを指定 | |
--cacert |
信頼するCA証明書を指定 | |
-h |
--help |
ヘルプを表示 |
-V |
--version |
バージョン情報を表示 |
-dオプションでデータを送信する #
-d オプションを利用する事で HTTP リクエストのボディにデータを含めて送信することができます。
このオプションを指定すると、curlは自動的に POST メソッドを使用し、指定されたデータを送信します。
-d オプションの基本的な使い方は以下の通りです。
curl -d "データ" [URL]
-dオプションの活用方法 #
フォームの動作確認 #
例えば、開発環境のログインページに対してPOSTリクエストを直接実行したい場合は以下のように実行する必要があります。
curl -d "username=devuser&password=devpass" https://dev.example.com/login
Webhookの手動トリガー #
その他の活用例として、Webhook に対してデータを手動送信する用途でも -d オプションを利用することができます。
たとえばCIツールや通知サービスのWebhook URLに対して、任意のイベント情報をPOSTで送信することで、動作確認や処理の再現が可能です。
なお、受け付けるデータ形式やパラメータはサービスごとに異なるため、事前に仕様を確認しておくことが重要です。
curl -X POST -d "event=deploy&status=success" https://hooks.example.com/deploy
応用 #
データの形式 #
-d で送信したデータは、特別な指定がない限り application/x-www-form-urlencoded として扱われます。
この形式は、Webフォームや一部のAPIで一般的に使用されており、サーバー側で簡単にパースできる利点があります。
ファイルの内容を送信 #
長いデータや複雑なJSONなどをコマンドラインに直接書くのが難しい場合は以下の形式にてデータを送信する事ができます。
curl -d @ファイル名 [URL]
以下の例ではカレントディレクトリにある test.json の内容をそのままPOST送信しています。
curl -H "Content-Type: application/json" -d @test.json https://example.com/api/
JSONなどの構造化データを送信する場合は、サーバー側に形式を正しく伝えるために Content-Type: application/json を明示的に指定する必要があります。
Content-Type の指定が誤っている場合、サーバーがデータをJSONとして解釈できず、リクエストが失敗する可能性があります。