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

执行Bash脚本调用curl时出现URL格式错误问题求助

问题:curl请求格式错误排查与修复

错误信息

curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 1

原脚本内容

#!/bin/bash
filename="$1"
URL='http://localhost:8983/contentCleaner?action=clean'
while read -r requestParam; do
   Req="curl ${URL} -X POST -H 'Accept:application/json' -H 'Content-Type:application/json' --data \"$requestParam\""
    Res=eval $Req
    echo "Res:$Res"
done < "$filename"

输入JSON示例(来自参数文件)

{ \"batchRequest\": { \"requests\": [ { \"contentData\": { \"contentText\": { \"ingestedContentSummary\": { \"provider\": { \"url\": \"twitter.com\" }, \"title\": \"Trump\" } } }, \"contentSource\": \"twitter\", } ] } }

修复方案

核心问题是用eval拼接执行curl命令,JSON里的括号、引号等特殊字符会被bash错误解析,导致curl识别到非法URL格式。直接调用curl并传递参数即可,完全不需要字符串拼接和eval。

修改后的脚本:

#!/bin/bash
filename="$1"
URL='http://localhost:8983/contentCleaner?action=clean'
while read -r requestParam; do
    # 直接执行curl,避免字符串解析引发的特殊字符问题
    Res=$(curl "$URL" -X POST -H 'Accept:application/json' -H 'Content-Type:application/json' --data "$requestParam")
    echo "Res:$Res"
done < "$filename"

额外注意事项:

  • 参数文件里的JSON如果带转义引号(\"),实际会传递给接口带转义的字符串,可能不符合解析要求。建议将参数文件里的转义引号去掉,改成标准JSON格式。
  • 原示例JSON中"contentSource": "twitter",末尾多了一个逗号,属于非法JSON,需要删除,否则接口可能返回解析错误。修正后的标准JSON如下:
{ "batchRequest": { "requests": [ { "contentData": { "contentText": { "ingestedContentSummary": { "provider": { "url": "twitter.com" }, "title": "Trump" } } }, "contentSource": "twitter" } ] } }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:30:44