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

Curl读取JSON文件编码为URL参数发送Amazon SQS消息

Curl - 将文件编码为URL查询参数

你之前尝试的命令无效,核心是没有正确使用--data-urlencode的参数规则,下面两种方案都可以直接实现需求,自动读取JSON文件、完成URL编码后发起请求。

方案1:POST表单传参(最简便,推荐)

不需要手动拼接URL,curl自动处理文件读取和编码,直接执行即可:

curl --request POST \
     --data-urlencode "Action=SendMessage" \
     --data-urlencode "MessageBody@input.json" \
     http://localhost:9324/queue/price-import

这个写法完全符合SQS接口的参数要求,和你最开始硬编码参数的请求效果完全一致,不管是本地模拟的SQS服务还是真实Amazon SQS都能正常识别。

方案2:参数拼接到URL查询串(完全匹配你最初的命令结构)

如果你一定要把MessageBody参数放在URL的查询串部分,可以先借助curl内置的编码能力处理文件内容,再拼接到URL上:

# 读取input.json内容并完成URL编码
ENCODED_MSG=$(curl -s -G --data-urlencode "MessageBody@input.json" "" 2>/dev/null | cut -d'?' -f2 | cut -d'=' -f2-)
# 拼接完整URL发起请求
curl --request POST \
     "http://localhost:9324/queue/price-import?Action=SendMessage&MessageBody=${ENCODED_MSG}"

之前尝试无效的原因

--data-urlencode的参数必须遵循固定格式,你之前的写法有几个典型错误:

  • 直接把完整URL跟在--data-urlencode后面时,curl会把整段URL当成普通待编码内容,不会识别其中的参数结构和@文件读取语法
  • 参数名写错:SQS要求的消息体参数名是MessageBody,你之前写的SendBody是无效参数
  • 参数格式缺失:读取文件作为参数值的正确格式是参数名@文件路径,不能漏写参数名、也不能把参数名和@符号的顺序写反

注意事项

  • 执行命令时如果不在JSON文件所在目录,把input.json换成文件的完整绝对路径即可
  • 如果JSON文件体积较大,优先用方案1的表单传参方式,避免URL长度超过服务端限制导致请求失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:15:58