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

含空格变量的Curl POST请求JSON错误及主机解析失败问题求助

解决带空格/特殊字符的变量在curl POST请求中报错的问题

这个问题我之前也踩过坑,本质是**shell的单词拆分(word splitting)**在搞鬼!当你的MACMODEL变量里包含空格、括号这类特殊字符时,直接用'{ "model":"'$MACMODEL'" }'这种写法会被shell拆成多个独立的“单词”,curl把这些拆分后的内容当成了额外的URL参数,所以才会出现“无法解析主机Pro”这类错误,同时JSON结构也被拆坏,服务器自然返回400错误。

下面给你几个靠谱的解决方案,按推荐程度排序:

方法1:用jq生成合法JSON(最推荐)

jq是专门处理JSON的工具,能自动帮你处理字符串转义,完全不用手动操心特殊字符的问题。先确保你安装了jq(macOS用brew install jq,Linux用apt install jq或对应系统的包管理器),然后修改命令:

MACMODEL='MacBook Pro (Retina, 13-inch, Early 2015)' 
curl --request POST \
--header 'Authorization2: token' \
--header "Content-Type: application/json" \
--data "$(jq -n --arg model "$MACMODEL" '{model: $model}')" \
https://endpoint ; echo

这里jq -n --arg model "$MACMODEL" '{model: $model}'会生成完全符合标准的JSON字符串,--arg参数安全地把变量传递给jq,不管变量里有空格还是特殊字符都能正确处理。

方法2:手动正确包裹引号

如果你不想额外安装工具,可以调整引号的写法,让shell正确识别整个JSON字符串:

MACMODEL='MacBook Pro (Retina, 13-inch, Early 2015)' 
curl --request POST \
--header 'Authorization2: token' \
--header "Content-Type: application/json" \
--data "{ \"model\": \"$MACMODEL\" }" \
https://endpoint ; echo

要点是:把整个--data的参数用双引号包裹,里面的JSON内部双引号要加反斜杠转义(\"),这样shell会完整展开$MACMODEL的值,不会把空格当成分隔符。

方法3:用Here-Document传递数据

还有一种更直观的方式,用curl的--data @-从标准输入读取JSON,配合here-document:

MACMODEL='MacBook Pro (Retina, 13-inch, Early 2015)' 
curl --request POST \
--header 'Authorization2: token' \
--header "Content-Type: application/json" \
--data @- https://endpoint <<EOF
{"model": "$MACMODEL"}
EOF

<<EOF到EOF之间的内容会被当成完整的输入传递给curl,shell会正确展开变量,同时保留所有空格和特殊字符,写法也很清晰。

随便选一种方法试一下,都能解决你遇到的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:47:59