私はAPIにヒットしたスクリプトを作成しています(残念ながら公開できません)。 私は、URL、パス、ポート、およびブール値のフィールドをいくつか提出することができます。Nodejs:投稿要求を送信するには?
私のスクリプトはまず、URLのリスト(各URLが新しい行にある)を取り込み、それらを配列に入れます。各URLには独自のインデックスがあります。
次に、httpリクエストを作成して投稿する機能があります。 はここで要求で送信されたものである。 { "url": url, "path": "/", "port": "443", "live_scan": "false", "advanced": "true" }
ところ、私は実際の書き込み機能が働くまで、様々なconsole.logsスルーすべてを見ることができたものから、url = array[counter]
。
var http = require('http');
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
// An object of options to indicate where to post to
var post_options = {
host: 'localhost',
port: '8080',
path: '/api/scan',
method: 'POST'
};
fs.readFile('urls.txt', function(err, data) {
//if (err) throw err;
//console.log(err);
var array = data.toString().split('\n');
for (var i = 0; i < array.length - 1; i++) {
str = array[i];
array[i] = str.slice(0, -1);
}
//console.log(array);
var emitter = new EventEmitter();
var counter = 1,
n = array.length;
//console.log(n);
// Start with the first request
function PostRequest() {
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
//body = JSON.parse(body);
// Make sure it's working
console.log(body);
// ADD THE CALLBACK
// OR
// TRIGGER EVENT
//PostRequest();
return emitter.emit('ResponseEnded');
});
});
var url = array[counter];
//console.log(url);
var catURL = { "url": url, "path": "/", "port": "443", "live_scan": "false", "advanced": "true" };
console.log(catURL);
var jsonURL = JSON.stringify(catURL);
post_req.write(jsonURL, function(err) {
if (err) throw err;
//console.log(err);
});
post_req.end();
}
emitter.on('ResponseEnded', function() {
counter++;
if (counter < n) {
PostRequest();
} else {
console.log('No more requests');
}
});
PostRequest();
});
私は愚かな作っています:その時点で
は、私は私の応答は常にundefined
であるか、より正確に、ここで{"response":{}}
は私の完全なコードであるとしてJSONが送信されないさんと信じています初心者の間違い?それとも、これはリクエストをするための完全に間違った方法ですか?
ありがとうございました!
私は、手動で各URLを配列に入力し、ファイルストリームを使用しない場合、これを行う方法があります。完全にその方法で動作するので、誤ってfsを使用していますか?ここで
は、ハードコードURLアレイ用のコードです:ここで
var http = require('http');
var fs = require('fs');
var EventEmitter = require('events').EventEmitter;
// An object of options to indicate where to post to
var post_options = {
host: 'localhost',
port: '8080',
path: '/api/scan',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
var array = ['ssl.com', 'google.com', 'hamzakhan.org'];
var emitter = new EventEmitter();
var counter = 0,
n = array.length;
console.log(n);
function PostRequest() {
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
body = JSON.parse(body);
// Make sure it's working
console.log(body.response.subject);
// ADD THE CALLBACK
// OR
// TRIGGER EVENT
//PostRequest();
return emitter.emit('ResponseEnded');
});
});
var url = array[counter];
var catURL = { "url": url, "path": "/", "port": "443", "live_scan": "false", "advanced": "true" };
post_req.write(JSON.stringify(catURL), function(err) {
//console.log(err);
post_req.end();
});
}
emitter.on('ResponseEnded', function() {
++counter;
if (counter < n) {
PostRequest();
} else {
console.log('No more requests');
}
});
// Start with the first request
PostRequest();
これは私がやっているのと同じことです。リクエストごとに1つのデータ文字列があり、要求ごとに変更が加えられます。 – hamza765
私はこのトリックがreq.write(postData)という行にあります。 – RobertoNovelo
正しくフォーマットされた文字列のみを受け入れます。 data =私の例で – RobertoNovelo