使用cURL POST JSON数据的方法
使用cURL POST JSON数据的方法
技术背景
在开发和测试过程中,我们经常需要向服务器发送JSON数据,cURL是一个强大的命令行工具,可以帮助我们完成这个任务。然而,默认情况下,cURL的 -d
选项会将数据以 application/x-www-form-urlencoded
格式发送,而不是 application/json
,这在某些场景下可能不符合需求。
实现步骤
1. 设置请求头
要发送JSON数据,需要将 Content-Type
请求头设置为 application/json
。可以使用 -H
或 --header
选项来设置请求头:
1 |
|
2. 发送POST请求
可以使用 -X POST
或 -d
选项来发送POST请求。当使用 -d
选项时,会隐含一个POST请求,因此 -X POST
是可选的。
3. 提供JSON数据
可以直接在命令中提供JSON数据,也可以将JSON数据存储在文件中,然后使用 @
符号引用文件。
核心代码
直接在命令中提供JSON数据
1 |
|
从文件中读取JSON数据
1 |
|
Windows系统的注意事项
在Windows系统中,-d
值使用单引号可能不起作用,需要使用双引号,并对花括号内的双引号进行转义:
1 |
|
使用 --json
选项(curl 7.82.0 及以上版本)
1 |
|
使用 jo
、curl
和 jq
组合
1 |
|
最佳实践
使用Postman生成cURL命令
可以使用Postman的直观GUI来组装cURL命令:
- 安装并启动Postman。
- 输入URL、请求体、请求头。
- 点击
Code
。 - 从下拉列表中选择
cURL
。 - 复制并粘贴cURL命令。
使用HTTPie替代cURL
HTTPie是一个推荐的替代工具,它默认支持JSON,会自动设置必要的请求头并将数据编码为有效的JSON:
1 |
|
常见问题
1. cURL将JSON中的 {}
解释为URL模板
当使用 --data
或 --data-binary
带有JSON参数时,cURL可能会将JSON中的 {}
解释为URL模板。可以添加 -g
选项来关闭cURL的全局匹配:
1 |
|
2. 遗漏 @
符号
在使用 -d
选项引用JSON文件时,需要在文件路径前加上 @
符号,否则cURL会将文件路径作为普通字符串处理。
3. 字符编码问题
可以通过设置 Content-Type
请求头的字符编码来解决字符编码问题:
1 |
|
使用cURL POST JSON数据的方法
https://119291.xyz/posts/2025-05-09.posting-json-data-with-curl/