用curl发送POST请求携带jsON数据需指定POST方法、设置Content-Type为application/json,并通过-d传入合法JSON字符串;推荐使用单行双引号格式或–data-binary@file.json读取文件。

用 curl 发送 POST 请求并携带 JSON 数据,核心是两件事:指定请求方法为 POST,并正确设置 Content-Type 为 application/json,再把 JSON 数据通过 -d(或 --data)传入。
基本格式(推荐)
最标准、最常用的一行命令:
curl -X POST -H “Content-Type: application/json” -d ‘{“key”:”value”,”num”:123}’ https://api.example.com/endpoint
关键参数说明
- -X POST:显式声明请求方法(可省略,因为
-d默认触发 POST) - -H “Content-Type: application/json“:必须加,否则服务端可能无法识别 JSON 体
- -d ‘{“key”:”value”}’:JSON 数据要写成**单行字符串**,字段名和字符串值都必须用双引号(JSON 标准要求)
- 如果 JSON 内容较长或含特殊字符(如换行、单/双引号),建议用
--data-binary @file.json从文件读取
实用技巧与常见写法
- 省略
-X POST(更简洁):
curl -H “Content-Type: application/json” -d ‘{“name”:”Alice”}’ https://api.example.com/users - 发送空 JSON 对象:
curl -H “Content-Type: application/json” -d ‘{}’ https://api.example.com/ping - 从文件读取(推荐用于复杂 JSON):
curl -H “Content-Type: application/json” –data-binary @data.json https://api.example.com/upload - 带认证或额外 Header(如 Token):
curl -H “Content-Type: application/json” -H “Authorization: Bearer abc123” -d ‘{“msg”:”hi”}’ https://api.example.com/msg
注意避坑
- 别用单引号包裹整个 JSON(如
'{"k":'v'}')—— shell 会报错;内部单引号需转义或改用双引号 - 别漏掉
Content-Type头,否则后端常返回 415 Unsupported Media Type - 中文或特殊字符确保 JSON 是 UTF-8 编码,linux 终端一般默认支持,无需额外处理
- 调试时加
-v查看完整请求/响应:
curl -v -H “Content-Type: application/json” -d ‘{“test”:true}’ https://httpbin.org/post
基本上就这些。记住三要素:POST 方法、JSON 头、合法 JSON 字符串 —— 其他都是锦上添花。