【问题标题】:Sending a HTTP Post Request correctly正确发送 HTTP Post 请求
【发布时间】:2016-07-03 08:09:42
【问题描述】:

我有一个简单的 AWS Lambda 函数,它必须接收 HTTP Post 数据并打印出来:

AWS Lambda 函数

var aws = require('aws-sdk');
var querystring = require('querystring');
var ses = new aws.SES();

exports.handler = function(event, context) {
    console.log("Incoming: ", event);             
};

我的 HTML 表单:

<form action="http://myawsfuncurl" method="POST">
   <input type="textarea" width="200" height="100" value="Hello"><br>
   <input type="submit" value="Send">
</form>

控制台只打印:Incoming: {}
没有收到数据。

但是,当我通过 java 代码发送 HTTP Post 时,这可以正常工作:

Java 代码

URL obj = new URL("http://myawsfuncurl");
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

String payload = "hello";

// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(payload);
wr.flush();
wr.close();

我怎样才能让它也通过 HTML 表单工作?

【问题讨论】:

    标签: java http aws-lambda forms http-post


    【解决方案1】:

    我在尝试通过 http POST 表单发送它时遇到了同样的问题。

    我通过 Ajax 请求发送它来解决这个问题,该请求将 JSON 数据发送到函数。

    这样的事情应该会有所帮助。如果你把它放在你的html页面上的一个脚本标签中。

    <script>
        $.support.cors = true;
        $('#id_of_form').submit(function(event){
            event.preventDefault();         
            $.ajax(
                {
                    type: 'POST',
                    url: 'http://myawsfuncurl',                 
                    dataType: 'json',
                    data: {
                        ParamA: $('#id_of_textarea").text()                 
                    },
                    error: function(obj, msg, exc){},
                    success: function(data){
                       alert('complete');                       
                    }
                }
            )
    
            return false;
        });
    </script>
    

    【讨论】:

    • Darren> 抱歉,我现在才开始尝试此操作...我现在收到此错误:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'mywebsite.com' 不允许访问。响应的 HTTP 状态代码为 400。
    • 是的,你需要让它通过。您是否添加了行 $.support.cors = true;如果我没记错的话,这使它起作用了。如果没有,您可以使用 JSONP 作为数据类型。或者根据实施情况,您可以将其隐藏在您的网站后面。例如,如果您使用 MVC,则可以创建一个控制器并向 AWS Function Url 发出请求。
    • Darren> 是的,我添加了 $.support.cors = true(没有帮助),我也尝试过使用 JSONP(显然它不能用于 POST 请求)。走服务器路线对我来说很麻烦......我在某处读过 AWS Javascript SDK 会有所帮助 - 但我没有尝试过,我不愿意在网页中添加另一个 js sdk。您能否查看您的实现以了解它对您的工作方式?
    • 所以我们实际上走了一条略有不同的路线。我们在 AWS Lambda 函数前面使用了 API Gateway。然后,您可以设置所需的 CORS 功能。这个link 将帮助您正确设置它。这基本上将充当您的 API 服务器,并允许您与函数正确交互。您基本上需要模拟 OPTIONS 动词以返回健康的 OK 消息,我认为它可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多