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

如何将包含大括号的QueryStringParams传入API Gateway Proxy/Lambda

解决API Gateway代理集成传递含大括号查询参数的问题

核心原因

API Gateway代理集成默认会自动对URL编码的查询参数进行解码,但大括号{}属于URL保留字符,若客户端未正确编码或网关内部解析逻辑误将其识别为模板占位符,会导致queryStringParameters中的参数值被错误转换。

可行解决方案

1. 直接使用Lambda事件中的原始查询字符串

API Gateway的代理事件包含未经过解析的rawQueryString字段,它完整保留了请求URL中的查询参数原始内容。你可以在Lambda中手动解析这个字段,绕过被错误处理的queryStringParameters。

示例Python代码:

import urllib.parse

def lambda_handler(event, context):
    # 获取原始查询字符串
    raw_query = event.get("rawQueryString", "")
    # 解析为键值对字典(注意parse_qs返回值为列表,需取第一个元素)
    parsed_params = urllib.parse.parse_qs(raw_query)
    param1 = parsed_params.get("param1", [""])[0]
    
    # 执行重定向逻辑,注意重定向时需对参数重新编码
    return {
        "statusCode": 302,
        "headers": {
            "Location": f"https://your-target-domain.com?param1={urllib.parse.quote(param1)}"
        }
    }

2. 关闭API Gateway的自动URL解码功能

通过修改API Gateway集成配置,禁用查询参数的自动解码,让网关直接保留原始参数值:

  • 登录API Gateway控制台,定位到目标API和资源
  • 进入集成请求设置,展开查询字符串参数板块
  • 将Decode URL encoded characters选项设置为False
  • 重新部署API,此时queryStringParameters中的参数值会保持原始的{param}格式

3. 验证原始请求的完整性

在Lambda中打印完整的event对象,确认rawQueryString是否准确传递了param1={param}。如果原始字符串已被篡改,需检查客户端请求逻辑,确保没有将大括号误识别为模板变量进行替换(比如某些HTTP客户端库的模板渲染功能)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:52:42