我正在尝试查看如何从 lambda 代码中访问请求标头和正文值。如果请求正文是 JSON 格式,它似乎会自动被解析并在事件对象中可用。
如何访问 Lambda 内任何类型的传入“Content-Type”请求的完整查询字符串、请求正文、请求标头 (cookie)?
下面的编辑是我收集的信息,以帮助解决可能相关或不相关的问题。如果您愿意,请忽略它们。
编辑:
我在这里和这里浏览了关于 SE 的现有问题。根据这个线程,使用$input.json('$')
应该可以解决问题。我猜上面这些链接的答案已经过时了,因为默认情况下 API 网关似乎可以识别请求中的 JSON,如果是这样,它可以在event
对象中使用而无需配置任何映射模板。
按照建议设置映射对我不起作用。它不包含请求头信息。
这是有关如何配置的屏幕截图。
“headers”键返回一个空白值。使用$input.params('$')
还是"$input.params('$')"
出错了。
编辑 2
尝试在方法请求中定义标头。仍然没有在 lambda 中获取 User-Agent 值。
编辑 3
我在 API Gateway 上使用了以下模板映射
{
"request": $input.json('$'),
"headers": "$input.params()"
}
以及下面的 lambda 代码
context.succeed("event.key32:"+JSON.stringify(event, null, 2) );
查看响应中的“标头”值,AWS-SDK/API 网关/cloudfront 似乎剥离了从 HTTP 客户端接收到的所有标头?这是 $input.params().header 返回的 JSON 的全文
header={CloudFront-Forwarded-Proto=https, CloudFront-Is-Desktop-Viewer=true, CloudFront-Is-Mobile-Viewer=false, CloudFront-Is-SmartTV-Viewer=false, CloudFront-Is-Tablet-Viewer=false, Content-Type=application/json, Via=1.1 5d53b9570d94ce920abbd471.cloudfront.net (CloudFront), 1.1 95eea7baa7ec95c9a41eca9e3ab7.cloudfront.net (CloudFront), X-Amz-Cf-Id=GBqmObLRy6Iem9bJbVPrrW1K3YoWRDyAaMpv-UkshfCsHAA==, X-Forwarded-For=172.35.96.199, 51.139.183.101, X-Forwarded-Port=443, X-Forwarded-Proto=https}}
它的标头中没有 User-Agent 字符串,尽管如上面的屏幕截图所示,它是由 REST 客户端发送的。有趣的是,整个查询字符串都可用。不确定这是否是访问它的预期方式。