私は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でのリクエスト?
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();
サンプルを検討する
私は他の答えを実装するのが難しかったので、自分に合ったものを投稿しています。
この場合、関数は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
}
外部ライブラリを必要とせずに、よりクリーンでパフォーマンスの高い方法は、次のようなものになると思います。
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');
HTTPオブジェクトを使用し、POST
を要求タイプとして使用します。 AWS LambdaのHTTPリクエストは、NodeJSを使用したHTTPリクエストと変わりません。
さらにサポートが必要な場合はお知らせください。