2016-05-12 21 views
0

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

答えて

0

OK]をので、私はここにいたすべてが正しいです。私の唯一の問題は、1時間前に私がヘッダーを送信することがオプションであると考えていたということでした...そうではありません。

私はpost_optionsでこれを忘れてしまった:助けを

headers: { 
     'Content-Type': 'application/json' 
    } 

感謝を。

0

は私が一度使用したものスクリプトです:

var http = require('http'); 

var postData = querystring.stringify ({data:JSON.stringify ({timestamp:"823738632"})}); 

var options = { 
    hostname: 'www.google.com', 
    method: 'POST', 
    port: 80, 
    path: '/ncr', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': Buffer.byteLength(postData) 
    } 
}; 

var sendRequest = function(options) 
{ 
    that = this; 
    that.req = http.request(options,function(res) 
    { 
     // console.log("Request began"); 
     var output = ''; 

     res.on('data', function (chunk) { 
      output += chunk; 
     }); 

     res.on('end', function() { 
      console.log(output); 
     }); 
    }); 

    that.req.on('error', function (err) 
    { 
     console.log("ServerError"); 
     console.log('error: ' + err.message); 
    }); 

    that.req.write(postData); 
    that.req.end(); 
}; 

sendRequest(options); 
+0

これは私がやっているのと同じことです。リクエストごとに1つのデータ文字列があり、要求ごとに変更が加えられます。 – hamza765

+0

私はこのトリックがreq.write(postData)という行にあります。 – RobertoNovelo

+0

正しくフォーマットされた文字列のみを受け入れます。 data =私の例で – RobertoNovelo

関連する問題