web-dev-qa-db-ja.com

AWS Lambda HTTP POSTリクエスト(Node.js)

私はAWSラムダ関数とnodejsが比較的新しいです。 HTTP POSTこのウェブサイトからのリクエスト: " http://www.webservicex.net/を使用して、国の5つの都市のリストを取得しようとしています。 globalweather.asmx?op = GetCitiesByCountry "

私はラムダ関数でHTTP POSTリクエストを行う方法を探してきましたが、それについての良い説明を見つけることができないようです。

Httpの投稿で見つけた検索:

https://www.npmjs.com/package/http-postHTTPの作成方法POST node.jsでのリクエスト?

5
Misuti

HTTP GETまたはPOST AWSラムダからのnodejsのリクエストを呼び出す、次のサンプルを試してください

const options = {
        hostname: 'hostname',
        port: port number,
        path: urlpath,
        method: 'method type'
    };

const req = https.request(options, (res) => {
    res.setEncoding('utf8');
    res.on('data', (chunk) => {
      // code to execute
    });
    res.on('end', () => {
      // code to execute      
    });
});
req.on('error', (e) => {
    callback(null, "Error has occured");
});
req.end();

サンプルを検討する

2
Rupali Pemare

私は他の答えを実装するのが難しかったので、自分に合ったものを投稿しています。

この場合、関数はURL、パス、および投稿データを受け取ります

ラムダ関数

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

exports.handler = function (event, context) {
var post_data = querystring.stringify(
      event.body
  );

  // 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);
          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": "example.com",      
       "path": "/apifunction",
       "body": { "data": "your data"}  <-- here your object
    }
11

外部ライブラリを必要とせずに、よりクリーンでパフォーマンスの高い方法は、次のようなものになると思います。

const https = require('https');

const doPostRequest = () => {

  const data = {
    value1: 1,
    value2: 2,
  };

  return new Promise((resolve, reject) => {
    const options = {
      Host: 'www.example.com',
      path: '/post/example/action',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      }
    };

    //create the request object with the callback with the result
    const req = https.request(options, (res) => {
      resolve(JSON.stringify(res.statusCode));
    });

    // handle the possible errors
    req.on('error', (e) => {
      reject(e.message);
    });

    //do the request
    req.write(JSON.stringify(data));

    //finish the request
    req.end();
  });
};


exports.handler = async (event) => {
  await doPostRequest()
    .then(result => console.log(`Status code: ${result}`))
    .catch(err => console.error(`Error doing the request for the event: ${JSON.stringify(event)} => ${err}`));
};

このラムダは、次のランタイムで作成およびテストされています:Node.js 8.10およびNode.js 10.xおよびHTTPSリクエストを実行できます。HTTPリクエストを実行するには、オブジェクトをインポートしてhttpに変更する必要があります。

const http = require('http');
4
valdeci

HTTPオブジェクトを使用し、POSTを要求タイプとして使用します。 AWS LambdaのHTTPリクエストは、NodeJSを使用したHTTPリクエストと変わりません。

さらにサポートが必要な場合はお知らせください。

0
Gurdev Singh