如何模拟node.js请求中的curl-F选项
我试图从node.js AWS lambda向sensiolabs安全api发布一些数据。sensiolabs站点上唯一的文档记录了如何为curl命令执行此操作。它将呼叫记录为如何模拟node.js请求中的curl-F选项,node.js,aws-lambda,Node.js,Aws Lambda,我试图从node.js AWS lambda向sensiolabs安全api发布一些数据。sensiolabs站点上唯一的文档记录了如何为curl命令执行此操作。它将呼叫记录为 curl-H“接受:文本/普通”https://security.sensiolabs.org/check_lock -F lock=@/path/to/composer.lock 我正试图从AWS lambda中执行此操作,其中composer.json位于S3存储桶中。我可以读取bucket并以字符串的形式获取文件的
curl-H“接受:文本/普通”https://security.sensiolabs.org/check_lock -F lock=@/path/to/composer.lock
我正试图从AWS lambda中执行此操作,其中composer.json位于S3存储桶中。我可以读取bucket并以字符串的形式获取文件的内容,但是我不知道如何正确地创建node.js请求对象来模拟上面的curl命令。以下是我的最新尝试:
exports.check_lockfile = function(data) {
var Readable = require('stream').Readable;
var s = new Readable;
s.push(data); // the string you want
s.push(null); // indicates end-of-file basically - the end of the stream
var promise = new Promise(
function(resolve, reject) {
var request = require('request');
var url = 'https://security.sensiolabs.org/check_lock';
var req = request.post({
headers: {
"Accept": "text/plain"
},
url: url
}, function(err, resp, body) {
if (err) {
console.log('Error!');
reject();
} else {
console.log(resp.statusCode);
console.log('body is ' + body);
console.log(JSON.stringify(resp));
resolve();
}
});
var form = req.form();
form.append('lock', s);
});
return promise;
};
但无论我尝试什么,我都会得到格式错误的请求或错误的请求
{“error”:“no lock}
curl-F相当于使用多部分/表单数据上载文件
我修改了代码并运行了它,得到了以下结果:
200
正文是安全报告
代码如下:
var fs = require('fs');
var request = require('request');
var url = 'https://security.sensiolabs.org/check_lock';
var formData = {lock: fs.createReadStream(__dirname + '/composer.lock')};
var req = request.post(
{
headers: {
"Accept": "text/plain",
"Content-Type": "multipart/form-data"
},
url: url,
formData: formData
}, function(err, resp, body)
{
if (err) {
console.log('Error!');
} else {
console.log(resp.statusCode);
console.log('body is ' + body);
console.log(JSON.stringify(resp));
}
}
);
注意:您可能需要更新“composer.lock”文件的路径,在我的测试中,我将其放在包含js文件的同一文件夹中
下面是使用node命令运行上述代码后的屏幕截图: