当前位置: 首页 > 知识库问答 >
问题:

使用HTTPendpoint访问lambda中的HTTP请求(头、查询字符串、cookie、正文)对象

郭彬郁
2023-03-14

我试图了解如何在lambda代码中访问请求头和正文值。如果请求体是JSON格式,那么它似乎自动被解析并在事件对象中可用。

如何访问Lambda中任何类型的传入“内容类型”请求的完整查询字符串、请求正文、请求头(cookie)?

下面的编辑是我收集的信息,以帮助解决可能或可能不相关的问题。如果你愿意,请忽略它们。

“headers”键返回一个空值。使用$input.params('$')“$input.params('$')”出错。

编辑2

尝试在方法请求中定义标头。仍未在lambda中获取用户代理值。

{
    "request": $input.json('$'),
    "headers": "$input.params()"
}
context.succeed("event.key32:"+JSON.stringify(event, null, 2) );

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}}

共有1个答案

白成济
2023-03-14

可以使用$input.params('header-name')访问请求标头

令人惊讶的是,上面的代码无法访问User-Agent头。你需要跳过下面的hoop来取回它:

$context.identity.useragent

{
   "reqbody": "$input.path('$')"
}

>

  • “User-Agent”头丢失/被Amazon API剥离。
  • 当头值包含双引号(“)时,不会执行lambda函数。(我在cloudwatch日志中没有看到此类请求的日志条目)。相反,http响应正文包含以下内容:

    {
       "Type": "User",
       "message": "Could not parse request body into json."
    }
    

    我认为需要对此进行纠正,以便能够实现ETag机制进行缓存。

    参考资料:

    http://gsnedders.com/http-entity-tags-confusion

  •  类似资料:
    • 我更倾向于使用Lambda和Java8来设置,但是使用node.js的示例也有助于理解如何实现这一点。

    • 我想获取在GraphQl查询调用期间传递的头值。在rest api HttpServletRequest的情况下,我们可以先做一些类似的事情。getheader() 我想从dataFetching环境中获取它,但从该值获取的上下文并没有让我从请求中获取标头值。 我不打算更改解析器方法调用,但任何改进代码的输入都会很好。

    • 如何访问Flask routes中的查询参数或查询字符串?从烧瓶文档中看不明显。 下面的示例路由说明了我希望访问该数据的上下文。如果有人请求类似于,我希望能够访问字符串,或者能够检索类似于的参数值。

    • 问题内容: 我正在使用Go中的程序包来处理POST请求。如何访问和解析对象中查询字符串的内容?我从官方文档中找不到答案。 问题答案: 根据定义,QueryString 位于URL中。您可以使用(doc)访问请求的URL 。URL对象具有一个返回类型的方法(doc),该类型只是QueryString参数的一个。 如果您要查找的是HTML表单提交的POST数据,那么(通常)这是请求正文中的键/值对。您

    • 问题内容: 如何访问客户端发布到经典ASP服务器的内容?我知道有Request.Forms变量,但是客户端的请求不是使用Form发出的。客户端请求的主体只是使用标准POST语句生成的字符串。谢谢 问题答案: 如果客户端发送的请求的内容类型不是表单数据,则需要读取请求字节。在这种情况下,请求不是可通过名称- 值对访问的表单数据,因此您不能使用Request.Form集合。我建议研究BinaryRea