2011-08-14 19 views
3

ノードのHTTPモジュールは、このURLから期待されるすべてのデータを返されていないすべてのデータを返しません。パケットスニッフィングはすべてのデータが入っていることを示しています。なぜそれが出力に含まれていませんか?は、Node.jsのHTTP GET

var http = require('http'), 
    host = 'itradedata.co.za', 
    records = 5, 
    url = '/pmchart/prices/GetPricesTRI.asp?Shortname=ACE&numprices=' + records, 
    client = http.createClient(80, host), 
    headers = { 'host': host }, 
    req; 

req = client.request('GET', url, headers); 
req.on('response', function(res) { 
    console.log(res.statusCode); 
    res.on('data', function (chunk) { 
     console.log(chunk.toString()); 
    }); 
}); 
req.end(); 

問題は、端末でcurl {url}を実行しているときcURLのもデータが表示されない...サーバーがデータを返す方法であると思われるが、それはcurl {url} -o {file}を使用するときにファイルにすべてを書き込みます。ここで何が起こっているのですか?

期待される結果:

# Attempting to get 5 prices for theTicker: ACE<BR> 
# Trying JSECODE<BR> 
# Sending prices for Entity_ID: 17352 Shortname: ShareID: JSECode: <BR> 
2011-8-15,46,46,46,46,0,08268 
2011-8-12,46,46,46,46,51,0068 
2011-8-11,46,46,46,46,51,0068 
2011-8-10,46,46,46,46,51,0068 
2011-8-8,46,46,46,46,51,00068 

実際の結果:

# Attempting to get 5 prices for theTicker: ACE<BR> 
# Trying JSECODE<BR> 
# Sending prices for Entity_ID: 17352 Shortname: ShareID: JSECode: <BR> 
2011-8-8,46,46,46,46,51,00068 

4つの欠落しているレコードは、結果の真ん中にあります。

答えて

2

このサイトは\rを送信していますが、\nは送信していないと確信しています。

バッファの内容:

2c 30 30 0d 32 30 

0D "はバックラインの始めに" と言い、0Aは、 "次の行を" と言います。したがって、常に元に戻りますが、新しい行を書き込むことはありません。既存の出力を上書きします。

すべてを表示するには、0dを0aに置き換えてみてください。

編集:試してみてください、それは動作します。コード:

req = client.request('GET', url, headers); 
req.on('response', function(res) { 
    console.log(res.statusCode); 
    res.on('data', function (chunk) { 
     for (var i=0; i<chunk.length; i++) 
      if (chunk[i] === 0xd) chunk[i] = 0xa 
     console.log(chunk.toString()); 
    }); 
}); 
req.end();