我正在使用AWS SAM(Lambda
第三方调用我的API,并在正文中包含JSON的GET请求。但是,当请求发送到带有正文的API时,CloudTop会拒绝该请求。
请求如下:
curl -X GET -H "Content-Type: application/json" --data '{"hello":"world"}' https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
以下是回应:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD>
<BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: 1p0St_-e3noQL-2uMxeB_2I6lkMr1mg5afvxJRmVpCdnG67Vgnhj9w==
</PRE>
<ADDRESS></ADDRESS>
</BODY>
</HTML>
检查日志时,请求永远不会命中API网关或Lambda函数。但是,如果我从请求中删除正文,那么它将命中Lambda函数,并且我将从API中获得适当的错误消息(告诉调用方预期的正文丢失)。
curl -X GET -H "Content-Type: application/json" https://my-api.execute-api.us-east-2.amazonaws.com/Prod/my-api
我通过SAM模板使用API网关的基本配置。这是相关章节:
MyApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: bin/main.zip
Handler: main
Runtime: go1.x
Tracing: Active
Role: !Sub ${MyApiLambdaExecutorRole.Arn}
Events:
CatchAll:
Type: Api
Properties:
Path: /my-api
Method: GET
GET请求不能包含请求主体。尝试使用POST
来代替。
如果要在GET
请求中发送有限的数据,可以使用查询参数。
你可以在AWS Lambda文档中看到,这在这里是不可能的:
https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-lambda-non-proxy-integration.html
这是因为您提交的GET请求不能接受有效负载,并且请求验证失败。
您可以使用EC2实例或其他不使用API网关的服务来处理请求。
我设置了以下信息: 创建了AWS S3存储桶并将一些映像上载到特定文件夹 创建了AWS CloudFront web发行版: 来源域名:从列表中选择的S3 bucket 限制存储桶访问:是 来源访问标识:选定的已有标识 授予桶的读取权限:是,更新桶策略 拒绝访问
我有以下问题:我试图在Spring控制器处理POST请求之前获取它的主体。为此,我使用HandlerInterceptorAdapter的preHandle()方法。 如本讨论中所述 SpringREST服务:从请求中检索JSON 我也使用使用此包装器,我设法打印了第一个POST请求的正文,但第二个POST抛出一个IOException:流关闭。 您对如何获取所有POST请求的正文有什么想法吗?
问题内容: 我在端口5000的node.js服务器上设置了CORS,如下所示: 我现在正尝试像这样在从硬盘打开的静态网页中使用JQuery发送AJAX POST请求: 该函数从不调用,并且我得到的唯一警报是来自XHR 处理程序的警报,其中包含以下错误: 我认为CORS配置合理, 我缺少什么? 编辑 :对于我而言,我能找到的最佳解决方案是从服务器发送页面: 问题答案: 这是我正在使用的代码。它位于我
问题内容: 首先,可能会说这个问题与HTTP请求正文非常相似,即它没有通过AWS API Gateway到达AWS Lambda函数,或者没有通过API网关在AWSLambda中获取json正文 但是,这些问题都没有解决使用Golang的问题,而我一直遇到的问题是找到与Node.js文档中各处使用的参数等效的参数。 这是我的Lambda函数: 问题:从API GW调用时,对象未填充任何值。该行导致
如何将转换为请求正文的表示形式?或者,如何正确地记录整个请求/响应,同时能够在其中散列潜在的凭据?
问题内容: 我是Go的新手,但到目前为止,我非常喜欢它。 我有一个我不知道的问题。我正在将API从Node迁移到Go,并且有此日志必须捕获POST 原样 并将其保存到Postgresql数据库的type列中。 这意味着我不能使用或预定的任何东西。 POST是用body raw制作的,如下所示: 在Node + Hapi上非常简单: 然后我可以从访问JSON 。 我正在将Go与Echo一起使用,所以