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

curl请求亚马逊广告API返回的S3预签名URL报格式非法是什么原因?

问题原因

你遇到的报错核心是shell对URL的解析错误,和URL本身有效性、WSL2的curl功能无关,具体原因对应你使用的三个错误curl写法分别如下:

  • 第一种写法curl -o $REPORT_DATA_FILE_GZ "$REPORT_DOWNLOAD_URL\":字符串末尾多了转义双引号,导致引号未正常闭合,curl拿到的URL会带上多余的转义字符,无法识别格式。
  • 第二种写法curl -o $REPORT_DATA_FILE_GZ "\"$REPORT_DOWNLOAD_URL\"":额外给URL前后拼接了双引号字符,curl实际请求的是带双引号的地址,自然判定格式非法。
  • 第三种写法curl -o $REPORT_DATA_FILE_GZ $REPORT_DOWNLOAD_URL:没有给URL变量加双引号包裹,亚马逊S3预签名URL里的&参数分隔符会被shell识别为后台运行指令,直接将URL从&位置截断,curl只能拿到不完整的路径片段,触发报错。

如果按正确写法调整后依然报错,大概率是URL变量中携带了不可见的Windows回车符\r:WSL2和Windows交互时,换行格式默认是Windows的CRLF,多余的\r会被当成URL的一部分,导致curl识别失败。

解决步骤
  1. 先使用正确的curl命令格式,所有变量都用双引号包裹,不要加额外的转义或引号:
curl -o "$REPORT_DATA_FILE_GZ" "$REPORT_DOWNLOAD_URL"
  1. 如果执行后依然报错,先检查变量是否存在不可见字符:
echo "$REPORT_DOWNLOAD_URL" | cat -A

如果输出末尾出现^M标识,就说明存在回车符,执行以下命令清理后再调用curl即可:

REPORT_DOWNLOAD_URL=$(echo "$REPORT_DOWNLOAD_URL" | sed 's/\r$//')
  1. 仍有问题可以给curl加上-v参数,打印完整请求日志,确认curl实际拿到的URL是否完整、是否有多余字符:
curl -v -o "$REPORT_DATA_FILE_GZ" "$REPORT_DOWNLOAD_URL"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:03