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

API Gateway无法向SQS发送完整请求体的解决方法

解决API Gateway无法向SQS发送完整请求体的问题

问题根源

你当前的API Gateway集成使用application/x-www-form-urlencoded格式向SQS发送请求,而请求体中包含&这类表单参数分隔符(比如Stripe事件里的cancel_url字段带有&success=false),会被HTTP表单解析器误判为新参数的起始位置,导致MessageBody被截断在第一个&出现的地方。

修复方案

修改API Gateway集成的请求模板,对请求体进行URL编码,避免特殊字符被误解析:

调整Terraform中的aws_api_gateway_integration配置

将原有的request_templates部分替换为:

request_templates = {
  "application/json" = "Action=SendMessage&MessageBody=$util.urlEncode($input.json('$'))"
}

$util.urlEncode()会自动转义JSON中的特殊字符(如&、=、空格等),确保整个请求体作为单一参数传递给SQS。

消费SQS消息时的注意事项

当你从SQS中读取消息时,需要对MessageBody进行URL解码,才能还原为原始的JSON格式。比如在Lambda中可以用decodeURIComponent()(JavaScript)或urllib.parse.unquote()(Python)完成解码。

额外验证点

  • 确认API Gateway的passthrough_behavior保持为NEVER,确保请求模板被正确使用。
  • 检查SQS队列的消息大小限制(默认是256KB),确保你的Stripe事件大小未超过限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:02:43