You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CURL POST两个文件?curl命令执行异常求助

解决curl POST多个JSON文件的问题

嘿,我来帮你搞定这个curl的问题!你遇到的核心矛盾是:当用多个-d参数指定两个JSON文件,同时设置Content-Type: application/json时,curl的处理逻辑和JSON格式要求完全冲突了。

为什么会出错?

-d参数默认会把数据当成表单字段处理,多个-d会生成类似key1=value1&key2=value2的格式,但JSON要求必须是单一的对象或数组结构。直接传两个文件的原始内容,会导致发送的数据是两个JSON字符串生硬拼接(比如{"a":1}{"b":2}),这完全不符合JSON语法,服务器自然解析失败。

正确的解决方案

根据你的需求,分两种常见场景处理:

1. 合并两个JSON为一个对象发送

如果服务器期望接收包含两个文件内容的单一JSON对象,推荐用jq工具(处理JSON的专业工具,更可靠)来合并:

# 合并两个JSON对象为一个,通过标准输入传给curl
jq -s '.[0] * .[1]' input.json input2.json | curl -vX POST http://localhost/api/postJSON -d @- --header "Content-Type: application/json"

解释:jq -s会把两个文件的内容转为数组元素,.[0] * .[1]将两个对象合并成一个(重复的键会用第二个文件的值覆盖第一个)。@-表示curl从标准输入读取数据。

如果没安装jq,可以用shell命令临时拼接(适合结构简单的JSON):

# 假设两个文件都是顶级对象,手动合并成一个合法JSON对象
echo -n '{' && cat input.json | sed 's/^{//;s/}$//' && echo -n ',' && cat input2.json | sed 's/^{//;s/}$//' && echo '}' | curl -vX POST http://localhost/api/postJSON -d @- --header "Content-Type: application/json"

2. 把两个JSON作为数组元素发送

如果服务器支持接收JSON数组,可以直接将两个文件内容包装成数组:

jq -s '.' input.json input2.json | curl -vX POST http://localhost/api/postJSON -d @- --header "Content-Type: application/json"

发送的数据格式是[第一个JSON内容, 第二个JSON内容],需要确保服务器能正确解析这种格式。

额外注意

如果你的JSON文件包含换行、特殊字符,建议用--data-binary代替-d,避免curl自动转换格式破坏JSON结构:

jq -s '.[0] * .[1]' input.json input2.json | curl -vX POST http://localhost/api/postJSON --data-binary @- --header "Content-Type: application/json"

内容的提问来源于stack exchange,提问作者Evi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:32