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

如何在Bash脚本中通过Curl向AWS SQS发送JSON格式消息?

解决Bash中用Curl向AWS SQS发送JSON消息的问题

这个问题我太熟悉了!你遇到的核心问题是JSON里的特殊字符(大括号{}、双引号"、空格等)在URL中属于需要编码的保留字符,直接拼在URL里会被HTTP服务器或者SQS解析错误,导致消息投递失败。下面给你几个实用的解决方案:

方案1:用curl的--data-urlencode自动编码(推荐)

这个方法最省心,--data-urlencode会自动帮你把所有特殊字符转换成URL编码格式,不用手动处理转义。命令示例:

curl "https://sqs.eu-west-1.amazonaws.com/[MY_QUEUE_NAME]?Action=SendMessage" \
  --data-urlencode "MessageBody={\"machine\": \"SOME_MACHINE\", \"user\": \"SOME_USER\"}"

注意:因为我们在Bash的双引号字符串里,JSON内部的双引号需要用反斜杠\转义,避免被Bash解析成字符串结束符。

方案2:读取本地JSON文件发送(适合复杂JSON)

如果你的JSON内容很长或者有多层嵌套,手动转义双引号太麻烦,可以先把JSON写到文件里,再让curl读取并编码:

# 第一步:把JSON内容写入文件(这里直接用echo生成,你也可以手动编辑)
echo '{"machine": "SOME_MACHINE", "user": "SOME_USER"}' > my_message.json

# 第二步:用curl发送,@符号表示读取文件内容作为参数值
curl "https://sqs.eu-west-1.amazonaws.com/[MY_QUEUE_NAME]?Action=SendMessage" \
  --data-urlencode "MessageBody@my_message.json"

这个方法完全不用处理转义问题,非常适合复杂场景。

方案3:手动URL编码JSON内容(不推荐,仅作了解)

如果你一定要把参数放在URL里,可以先把JSON内容手动转换成URL编码格式。比如你的原始JSON:

{"machine": "SOME_MACHINE", "user": "SOME_USER"}

编码后会变成:

%7B%22machine%22%3A%20%22SOME_MACHINE%22%2C%20%22user%22%3A%20%22SOME_USER%22%7D

然后拼到URL里:

curl "https://sqs.eu-west-1.amazonaws.com/[MY_QUEUE_NAME]?Action=SendMessage&MessageBody=%7B%22machine%22%3A%20%22SOME_MACHINE%22%2C%20%22user%22%3A%20%22SOME_USER%22%7D"

不过这种方法容易出错,尤其是JSON内容复杂的时候,不建议使用。

额外小贴士

AWS SQS的SendMessage API也支持POST请求,把参数放在请求体里会比拼在URL里更清晰,比如:

curl -X POST "https://sqs.eu-west-1.amazonaws.com/[MY_QUEUE_NAME]" \
  --data "Action=SendMessage" \
  --data-urlencode "MessageBody={\"machine\": \"SOME_MACHINE\", \"user\": \"SOME_USER\"}"

这样参数分开写,可读性更强,也更不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:46:31