web-dev-qa-db-fra.com

AWS Lambda HTTP POST Requête (Node.js)

Je suis relativement nouveau dans AWS lambda function et nodejs. J'essaie d'obtenir la liste des 5 villes d'un pays en utilisant la requête HTTP POST de ce site: " http://www.webservicex.net/globalweather.asmx?op=GetCitiesByCountry "

J'ai cherché comment faire une demande HTTP POST dans la fonction lambda mais je n'arrive pas à trouver une bonne explication pour cela.

Recherches que j'ai trouvées pour le post http:

https://www.npmjs.com/package/http-postComment faire une demande HTTP POST dans node.js?

2
Misuti

Essayez l'exemple suivant en appelant la requête HTTP GET ou POST dans nodejs à partir d'AWS lambda 

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();

Considérons l'échantillon

2
Rupali Pemare

J'ai eu du mal à mettre en œuvre les autres réponses, alors je publie ce qui a fonctionné pour moi.

Dans ce cas, la fonction reçoit les données url, path et post

Fonction Lambda

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();

}

Exemple de paramètres d'appel

   {
      "url": "example.com",      
       "path": "/apifunction",
       "body": { "data": "your data"}  <-- here your object
    }
3
Luciano Marqueto

Utilisez l'objet HTTP et utilisez POST comme type de demande. Les requêtes HTTP dans AWS Lambda ne diffèrent pas des requêtes HTTP utilisant NodeJS.

Faites-moi savoir si vous avez besoin de plus d'aide.

1
Gurdev Singh