使用 AWS API Gateway 访问原始 URL

Posted

技术标签:

【中文标题】使用 AWS API Gateway 访问原始 URL【英文标题】:Accessing raw url using AWS API Gateway 【发布时间】:2019-03-17 14:05:35 【问题描述】:

是否可以使用 AWS API Gateway(和 Lambda)访问原始 url?

或者,是否可以访问原始的、未解码的查询字符串参数?

我们正在与第三方服务集成,该服务调用我们的 API 并对来自 Windows-1252 的查询字符串参数进行编码。 (例如,芬兰字母 Ä 编码为 %C4 而不是 %C3%84)。 API Gateway 似乎会自动解码查询字符串参数并假定 UTF-8,这意味着 Ä(以及 Ö 和 Å)会导致 \ufffd。

供参考:https://www.w3schools.com/tags/ref_urlencode.asp

【问题讨论】:

我认为不会。 ApiGateway 默认解码所有查询参数。但如果你愿意,你总是可以将它们编码回来 问题是,我无法将它们编码回来,因为所有非ascii字符都会导致\ufffd(解码失败时使用的替换字符。) 您是否尝试过像这样调整您的模板映射? ***.com/a/33143297/383839 这种方法有什么特别之处吗?我确实尝试过自己创建映射,但是在迭代 $input.params().querystring 时,这些值已经被解码。 类似问题:***.com/questions/49372722/… 【参考方案1】:

该死的,这看起来真的不可能……

我开始编写如何将Lambda Proxy Integration 与event.queryStringParameters 一起使用,但这会将数据解析为键值对象。

然后我在 API Gateway 中沿着 Mapping Templates 的道路前进,但似乎没有任何属性可以显示整个查询字符串。

尽管我不希望它是真的,但我只能得出不可能的结论......

我认为您最好的选择是在客户端将参数编码为 base64,然后使用 Object.keys(event.queryStringParameters)[0] 在 Lambda 函数中解码。

【讨论】:

感谢您尝试对此进行调查,尽管这不是我希望的答案。我真的不明白,他们为什么不将原始网址传递给您,请随意处理......

以上是关于使用 AWS API Gateway 访问原始 URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTTP 代理访问 AWS API Gateway 中的标头?

在 AWS 中运行 spring boot 应用程序并且只允许通过 AWS API Gateway 访问

消息:尝试访问 aws gateway api 时出现“内部服务器错误”

如何通过 Cognito 用户 ID 限制访问 AWS API Gateway 端点

只允许 AWS API Gateway 访问 EC2 实例

AWS API Gateway 的访问权限