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/postsLinuxでcurlを実行
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という名前のファイルに次のような内容を記述します。
{ "name": "Alice", "age": 25, "city": "Tokyo"}その上で、以下のようにコマンドを実行します。
curl -X POST ^ -H "Content-Type: application/json" ^ -d @data.json ^ https://jsonplaceholder.typicode.com/postscurl -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/postscurl -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ユーザにお勧めの本
以上で本記事の解説を終わります。
よいITライフを!