curlでJSONをPOSTする方法【Linux、Windows対応】

curlでJSONをPOSTする方法【Linux、Windows対応】

当ページのリンクには広告が含まれています。

記事の文字数:1507

curlコマンドを使ってJSONデータをPOSTする方法を解説します。LinuxとWindowsそれぞれのコマンドを紹介します。基本的な使い方から外部ファイルの読み込み、HTTPヘッダーなどのレスポンス確認やエラー対処法まで、現場で活用できる情報を提供します。


スポンサーリンク

Web APIとのやりとりや、バックエンドとの通信確認など、開発現場で頻繁に使われるのがcurlコマンドです。特にJSON形式でデータを送信する機会は多く、フロントエンドからの動作確認、APIの疎通テスト、自動化スクリプトなど幅広い用途があります。

この記事では、curlを使ってJSONデータをPOSTする基本的な方法から、実践的な応用、トラブルシューティングまで、初心者にもわかりやすく解説します。

前提(JSONPlaceholderを利用)

  • JSONPlaceholderを利用して解説します。
    • JSONPlaceholderは、無料のモックAPIサービスで、POST リクエストに対してダミーのレスポンスを返してくれます。
    • 実際にAPI開発・デバッグで使われるcurlの動作を確認できます。

curlでPOSTする

まず、最もシンプルな形のcurlによるJSON POSTの例を見てみましょう。

コマンドプロンプトでcurlを実行

コマンドプロンプトで実行
curl -X POST ^
-H "Content-Type: application/json" ^
-d "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}" ^
https://jsonplaceholder.typicode.com/posts

Linuxでcurlを実行

Linuxで実行
curl -X POST \
-H "Content-Type: application/json" \
-d '{"title":"foo","body":"bar","userId":1}' \
https://jsonplaceholder.typicode.com/posts
実行結果
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
OS/環境指定方法の例
Linux-d '{"key":"value"}' (シングルクォートOK)
Windows cmd-d "{\"key\":\"value\"}" (ダブルクォート&エスケープ)

各オプション(-X、-H、-d)の説明

  • -X POST: HTTPメソッドをPOSTに指定します。これはサーバー側にデータを送信したいときに必要です。
  • -H "Content-Type: application/json": リクエストヘッダに「このデータはJSON形式です」と明示するための指定です。
  • -d '{...}': 実際に送信するJSONデータ本体です。-dのあとにシングルクォートまたはダブルクォートで囲んだJSON文字列を記述します。

外部ファイルからJSONを読み込んでPOSTする

テストケースが複数ある場合や、JSONデータが長大でコマンドラインでの記述が煩雑になる場合は、外部ファイルからデータを読み込む方法が便利です。

まず、JSONデータをファイルに保存します。たとえば、data.jsonという名前のファイルに次のような内容を記述します。

data.json
{
"name": "Alice",
"age": 25,
"city": "Tokyo"
}

その上で、以下のようにコマンドを実行します。

コマンドプロンプトで実行
curl -X POST ^
-H "Content-Type: application/json" ^
-d @data.json ^
https://jsonplaceholder.typicode.com/posts
Linuxで実行
curl -X POST \
-H "Content-Type: application/json" \
-d @data.json \
https://jsonplaceholder.typicode.com/posts

-d @ファイル名の形式を使うことで、ファイル内の内容をそのままリクエストボディとして送信できます。

出力結果
{
"name": "Alice",
"age": 25,
"city": "Tokyo",
"id": 101
}

HTTPヘッダーと詳細ログの表示

送信したリクエストに対して、サーバーがどのようなレスポンスを返してきたかを確認することも重要です。以下のオプションを活用することで、より詳細な情報を得ることができます。

コマンドプロンプトで実行
curl -ivo response.txt -X POST ^
-H "Content-Type: application/json" ^
-d "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}" ^
https://jsonplaceholder.typicode.com/posts
Linuxで実行
curl -ivo response.txt -X POST \
-H "Content-Type: application/json" \
-d '{"title":"foo","body":"bar","userId":1}' \
https://jsonplaceholder.typicode.com/posts

各オプション(-i、-v、-o)の説明

  • -i: HTTPヘッダー情報を表示。
  • -v: 詳細な通信ログを表示。トラブル発生時のデバッグに有効。
  • -o response.txt: レスポンス内容をファイルに保存。

curlのトラブルシューティング

curlを使っていると、意図しないエラーに遭遇することがあります。以下に代表的なエラーとその原因、対処法をまとめます。

HTTP/1.1 500 Internal Server Error

  • 原因: JSONの構文エラー(例: クォートの不一致、カンマ忘れ)
  • 対処: JSONをバリデーションツールなどで検証しましょう。

Linuxユーザにお勧めの本

ゼロからわかる Linuxコマンド200本ノック?基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

新品価格
¥2,587 から
(2025/4/22 20:54時点)

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

新品価格
¥2,475 から
(2025/4/22 21:13時点)


以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top