使用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
-H "Content-Type: application/json"

2. 发送POST请求

可以使用 -X POST-d 选项来发送POST请求。当使用 -d 选项时,会隐含一个POST请求,因此 -X POST 是可选的。

3. 提供JSON数据

可以直接在命令中提供JSON数据,也可以将JSON数据存储在文件中,然后使用 @ 符号引用文件。

核心代码

直接在命令中提供JSON数据

1
2
3
4
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://localhost:3000/api/login

从文件中读取JSON数据

1
curl -H "Content-Type: application/json" --data @body.json http://localhost:8080/ui/webapp/conf

Windows系统的注意事项

在Windows系统中,-d 值使用单引号可能不起作用,需要使用双引号,并对花括号内的双引号进行转义:

1
curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path

使用 --json 选项(curl 7.82.0 及以上版本)

1
curl --json '{"tool": "curl"}' https://example.com/

使用 jocurljq 组合

1
2
3
4
5
jo value=30 type="Tip 3" targetModule="Target 3" configurationGroup=null name="Configuration Deneme 3" description=null identity="Configuration Deneme 3" | \
curl --json @- \
-X POST \
http://localhost:8080/xx/xxx/xxxx | \
jq

最佳实践

使用Postman生成cURL命令

可以使用Postman的直观GUI来组装cURL命令:

  1. 安装并启动Postman。
  2. 输入URL、请求体、请求头。
  3. 点击 Code
  4. 从下拉列表中选择 cURL
  5. 复制并粘贴cURL命令。

使用HTTPie替代cURL

HTTPie是一个推荐的替代工具,它默认支持JSON,会自动设置必要的请求头并将数据编码为有效的JSON:

1
http POST http://example.com/some/endpoint name=value name1=value1

常见问题

1. cURL将JSON中的 {} 解释为URL模板

当使用 --data--data-binary 带有JSON参数时,cURL可能会将JSON中的 {} 解释为URL模板。可以添加 -g 选项来关闭cURL的全局匹配:

1
curl -g -X POST -H "Content-Type: application/json" --data '{"key": "value"}' http://example.com

2. 遗漏 @ 符号

在使用 -d 选项引用JSON文件时,需要在文件路径前加上 @ 符号,否则cURL会将文件路径作为普通字符串处理。

3. 字符编码问题

可以通过设置 Content-Type 请求头的字符编码来解决字符编码问题:

1
-H "Content-Type: application/json; charset=UTF-8"

使用cURL POST JSON数据的方法
https://119291.xyz/posts/2025-05-09.posting-json-data-with-curl/
作者
ww
发布于
2025年5月9日
许可协议