如何通过lambda脚本将JSON数据发布到另一台服务器

时间:2017-01-16 07:37:55

标签: php json node.js amazon-web-services

我正在尝试从AWS lambda函数向其他服务器发送一些JSON数据(从DaynamoDB获取),但在脚本中提供URL:

'use strict';

const https = require('https');

exports.handler = (event, context, callback) => {

      var options = {
      hostname: 'https://www.corecomputersystem.com',
      path: '/getSyncData.php',
      port : 432,
      method: 'POST',
      headers: {
          'Content-Type': 'application/json',
      }
    };
     event.Records.forEach((record) => {

        console.log(record.eventID);
        console.log(record.eventName);
        console.log('DynamoDB Record: %j', record.dynamodb);
        var res = record.dynamodb;

        const req = https.request(options, (res) => {
        let body = "";
        console.log('Status:', res.statusCode);
        console.log('Headers:', JSON.stringify(res.headers));
        res.setEncoding('utf8');
        res.on('data', (chunk) => body += chunk);
        res.on('end', () => {
            console.log('Successfully processed HTTPS response');
            // If we know it's JSON, parse it
            if (res.headers['content-type'] === 'application/json') {
                body = JSON.parse(body);
            }
            callback(null, body);
        });
    });
    req.on('error', callback);
    req.write(JSON.stringify(event.data) + "");
    req.end();
    //context.succeed();
    });

};

它抛出以下错误,

{
  "errorMessage": "getaddrinfo ENOTFOUND https://www.corecomputersystem.com https://www.corecomputersystem.com:432",
  "errorType": "Error",
  "stackTrace": [
    "errnoException (dns.js:26:10)",
    "GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26)"
  ]
}

如果我取消注释context.succeed(),则没有错误,我需要帮助来识别错误。

4 个答案:

答案 0 :(得分:1)

只是为了深入了解@ at0mzk说,主机名永远不会占用任何端口号,所以任何前缀如[http,https,smb,nfs]://都会在请求主机名时抛出错误。

http://localhost === localhost:80)

答案 1 :(得分:0)

从hostname变量中删除https://。

var options = {
  hostname: 'www.corecomputersystem.com',
  path: '/getSyncData.php',
  port : 432,
  method: 'POST',
  headers: {
      'Content-Type': 'application/json',
}

请参阅docs

答案 2 :(得分:0)

在发出HTTPS请求之前,我们可以使用:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

所以它不会要求授权。

答案 3 :(得分:0)

我们可以在请求HTTP之前在选项中添加密钥的另一种方法:

rejectUnauthorized: false

它不会要求自己签署证书。

这就是我要搜索的内容。

相关问题