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

Bash脚本中拼接含Token的URL传递给curl异常问题解决

解决Bash脚本中拼接URL后curl返回Pending状态的问题

我之前碰到过类似的情况,这种脚本内请求异常但CLI执行正常的问题,大多是变量处理或命令写法的隐性问题,下面是几个关键的排查和修复点:

1. 清理Token中的隐藏字符

从jq获取的myToken可能带有换行符或不可见空白字符(比如回车),这会让拼接后的URL包含无效字符,导致服务器无法正确识别请求。可以在获取Token时增加清理步骤:

# 移除可能存在的换行/回车符,确保Token是纯字符串
myToken=$(echo "${myAccessJSON}" | jq -r '.token' | tr -d '\n\r')

虽然jq -r已经是raw输出,但如果原始JSON的token字段本身带隐藏字符,或者管道传递中引入了换行,这一步能彻底清理干净。

2. 正确拼接URL(用引号包裹变量)

脚本里的URL拼接方式容易出现隐性问题,建议用双引号包裹变量,避免shell解析时的意外:

baseUrl="https://api.site.com/api/v2/export/"
# 用双引号包裹变量,确保拼接时不会出现空格或特殊字符解析错误
myUrl="${baseUrl}${myToken}"

可以在拼接后加一行调试输出,确认URL是否正确:

echo "调试:拼接后的URL为 '${myUrl}'"

如果输出里URL带有换行或者空格,那就是Token清理环节的问题。

3. 修复curl命令的写法

你原来的curl命令里反斜杠后面加了空格,这会导致shell把\ --header当成错误的参数(反斜杠转义了后面的空格,使得--header前多了一个无效空格),正确的写法是反斜杠后面直接换行,不要加空格:

awsAccess=$(curl -X GET "${myUrl}" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer myAuthCode")

同时,${myUrl}一定要用双引号包裹,防止URL中出现特殊字符(比如参数里的&、?)被shell拆分。

4. 额外验证点

如果上面的步骤还没解决问题,可以在脚本里直接把拼接后的URL赋值成硬编码形式测试:

myUrl="https://api.site.com/api/v2/export/123456"

如果这样请求正常,那还是Token的获取或拼接环节有问题;如果还是返回Pending,那可能是脚本执行环境和CLI环境有差异(比如环境变量、权限),但这种情况比较少见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:13:01