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

Aws LAMBDA:HTTP POST请求

岳嘉悦
2023-03-14

我正在尝试从一个使用的样本服务(TripPin)的OData RESTful API发布数据。请求成功,但响应为空。为了发出HTTP post请求,AWS Lambda平台中有什么特殊的结构需要考虑吗?

var querystring = require('querystring');
var http = require('http');

exports.handler = function (event, context) {
var post_data = querystring.stringify(
     {
    UserName:'lewisblack',
    FirstName:'Lewis',
    LastName:'Black',
    Emails:[
        'lewisblack@example.com'
    ],
    AddressInfo:[
        {
            Address: '187 Suffolk Ln.',
            City: {
CountryRegion: 'United States',
Name: 'Boise',
Region: 'ID'
            }
        }
    ],
    Gender: 'Male'
}
  );


  // An object of options to indicate where to post to
  var post_options = {
      host: event.url,
      port: '80',
      path: event.path,
      method: 'POST',
      headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': Buffer.byteLength(post_data)
      }
  };

  // Set up the request
  var post_req = http.request(post_options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function (chunk) {
          console.log('Response: ' + chunk);
          console.log("hello");
          context.succeed();
      });
      res.on('error', function (e) {
        console.log("Got error: " + e.message);
        context.done(null, 'FAILURE');
      });

  });

  // post the data
  post_req.write(post_data);
  post_req.end();

}

调用参数示例:

{
  "url": "services.odata.org",
  "path": "/v4/TripPinServiceRW/"
}

响应:空

请求编号:“6 f1 EC 2 b 4-5195-477 f-9fb 8-56fd 33 dee 0 ce”

函数日志:启动请求id:6 f1ec 2 b 4-5195-477 f-9fb 8-56fd 33 dee 0 ce版本:$LATEST

结束请求ID:6f1ec2b4-5195-477f在此处输入代码-9fb8-56fd33de0ce

报告请求ID:6f1ec2b4-5195-477f-9fb8-56fd33de0ce持续时间:431.87 ms

计费持续时间:500 ms内存大小:128 MB最大使用内存:73 MB

共有1个答案

宋运锋
2023-03-14

太长别读了;我认为你的AWS Lambda集成坏了,但我很难确定。为演讲道歉。

我推荐以下几点:

事件对象中的内容取决于如何调用AWS Lambda函数。您可以通过API调用直接调用它,也可以通过让另一个AWS服务触发它来间接调用它。请注意:

每个事件类型的事件文档的结构都不同,并且包含有关触发函数的资源或请求的数据

https://docs.aws.amazon.com/lambda/latest/dg/lambda-services.html

找出答案的最简单方法可能是在处理程序的开头添加一些日志记录:

console.log(JSON.stringify(event));

一旦您弄清楚events对象中的实际内容,请为其编写测试。这应该会改进代码的设计和开发周期。

在本地测试服务器上测试上面的代码会给出一个成功的响应。见下文。

但这并不意味着它会 https://services.odata.org。

    < li >该api看起来像是只读的,但您正在尝试写入它。 < li >您在端口80上通过HTTP调用它。看起来它想在端口443上被HTTPS呼叫。

同样,您应该弄清楚应该如何调用该服务并为其编写测试。

索引.规范. js

var index = require("./index");

describe('index', () => {
    it('can make requests to localhost', (done) => {
        return index.handler({
            "url": "localhost",
            "path": "/"
          }, {
              done: done,
              succeed: done
        });
    });
});

package.json

  ...
  "scripts": {
    "test": "jest"
  },
  "devDependencies": {
    "jest": "^24.8.0"
  }
  ...

输出:

> npm test

  > lambda-post@1.0.0 test /somepath/index.spec.js
  > jest

   PASS  ./index.spec.js
    index
      ✓ can make requests to localhost (20ms)

    console.log index.js:44
      Response: <html><body><h1>POST!</h1></body></html>

    console.log index.js:45
      hello

  Test Suites: 1 passed, 1 total
  Tests:       1 passed, 1 total
  Snapshots:   0 total
  Time:        0.89s, estimated 1s
  Ran all test suites.

您正在使用低级节点 http 库。像axios这样的图书馆可能会在短期内让你的生活更轻松。请参阅其自述文件/维基上的 HTTP 帖子示例。

 类似资料:
  • 一个应用的请求是用 yii\web\Request 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数)、HTTP头、cookies等信息。 默认情况下,对于一个给定的请求,你可以通过 request application component 应用组件(yii\web\Request 类的实例) 获得访问相应的请求对象。在本章节,我们将介绍怎样在你的应用中使用这个

  • Wiki ▸ [[API--中文手册]] ▸ [[核心函数]] ▸ 请求 如果你不访问数据那么你就不能可视化它。幸运的是有很多的方法可以把数据放到浏览器中。对于小数据集,你可以硬编码到你的脚本里,或者使用数据属性嵌入到DOM中。对于大数据集,你可以引用外部脚本并定义你的数据为一个全局变量。(JSONP就是一个常见的例子)。最通用的方式是使用XMLHttpRequest, 或说XHR加载数据到浏览器

  • 请求对象(Request) 是完全基于 PSR-7 标准实现的,由 hyperf/http-message 组件提供实现支持。 注意 PSR-7 标准为 请求(Request) 进行了 immutable 机制 的设计,所有以 with 开头的方法的返回值都是一个新对象,不会修改原对象的值 安装 该组件完全独立,适用于任何一个框架项目。 composer require hyperf/http-m

  • 请求对象封装了客户端请求的所有信息。在 HTTP 协议中,这些信息是从客户端发送到服务器请求的 HTTP 头部和消息体。

  • 我有一个具有OAuth2授权的Spring Cloud应用程序: 我添加了这个安全配置: github:https://github.com/rcbandit111/OAuth2/blob/master/src/main/java/org/engine/security/WebSecurityConfig.java 打开Angular应用程序时,出现访问错误: 您知道我需要应用什么配置才能在没有强

  • 有人能帮我吗? 谢谢

  • 本文向大家介绍全面解析iOS中同步请求、异步请求、GET请求、POST请求,包括了全面解析iOS中同步请求、异步请求、GET请求、POST请求的使用技巧和注意事项,需要的朋友参考一下 先给大家分别介绍下iOS中同步请求、异步请求、GET请求、POST所代表的意思,然后在逐一通过实例给大家介绍。 1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进

  • 我已经使用zappa在aws lambda上部署了一个flask应用程序,现在该应用程序在所有endpoint上都运行良好,除了我的主endpoint,当我对其发出post请求时,它返回{“消息”:“endpoint请求超时”} 真的需要一个修复或想法如何克服这个我需要调用分析路线,部署的url是 https://2ixfyfcsik.execute-api.eu-west-2.amazonaws