curlでJSONボディをPOST送信

curlでJSONペイロードをPOSTリクエストで送信する方法を解説。Content-Typeヘッダー、データ形式、ファイル入力、--jsonショートカットの使い方を学びましょう。

General

詳細な説明

curlでJSONをPOST送信する

JSONボディを伴うPOSTリクエストは、現代のAPI通信の基盤です。curlを使えば、あらゆるエンドポイントに構造化データを簡単に送信できます。

基本的なJSON POST

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice", "email": "alice@example.com"}'

-X POST フラグでHTTPメソッドを設定し、-H でContent-Typeヘッダーを追加し、-d でリクエストボディを指定します。

ファイルからJSONを読み込む

大きなペイロードの場合、@ プレフィックスを使ってファイルからJSONボディを読み込みます:

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d @payload.json

--jsonフラグの使用(curl 7.82以降)

最新版のcurlには、Content-TypeヘッダーとAcceptヘッダーを自動設定する --json ショートカットがあります:

curl --json '{"name": "Alice"}' https://api.example.com/users

これは -H "Content-Type: application/json"-H "Accept: application/json"-d をすべて同時に設定するのと同等です。

エスケープとクォート

シェルスクリプトでJSONを扱う際、クォートの処理が複雑になることがあります。シェルの変数展開を避けるため、JSON文字列をシングルクォートで囲みましょう:

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"count": 42, "active": true, "tags": ["admin", "user"]}'

シェル変数を含める必要がある場合は、ダブルクォートに切り替えて内部のクォートをエスケープします:

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d "{\"name\": \"$USER_NAME\"}"

リクエストの検証

開発中は、POSTリクエストと -v(verbose)を組み合わせて、ヘッダーやステータスコードを含むリクエスト・レスポンスの全体を確認しましょう。送信前にJSONの整合性を検証するには、jq にパイプして確認するのが有効です。

ユースケース

バックエンド開発者がREST APIを通じて新しいリソースを作成する際に、ユーザーアカウント登録やフォームデータ送信など、構造化されたJSONデータを送信する必要がある場合に使用します。

Try It — Curl to Code Converter

フルツールを開く