2011-01-26 54 views
15

我正在使用node.js來下載網頁。然而,這不是接收數據的任何塊:使用node.js HTTP遠程客戶端請求不返回任何正文

console.log('preparing request to ' + url) 
    u = require('url').parse(url) 
    var remote_client = http.createClient(80, u['host']); 
    var request = remote_client.request("GET", u['pathname'], {"host": u['host']}); 
    console.log("request made") 

    request.addListener('response', function (response) { 
     response.setEncoding('binary') 
     var body = ''; 

     response.addListener('data', function (chunk) { 
      body += chunk; 
      console.log('chunk received') 
     }); 
    }); 

最後控制檯消息是「發請求」。沒有「收到塊」或類似的控制檯消息。思考?

+1

您忘記request.end() – generalhenry 2011-01-26 00:29:48

+0

你也可以只轉用http.get()http://nodejs.org/docs/v0.3.6/api/http.html#http.get – generalhenry 2011-01-26 00:32:53

回答

12

這是一個總是爲我工作的例子:

var sys = require('sys'), 
    http = require('http'); 

var connection = http.createClient(8080, 'localhost'), 
    request = connection.request('/'); 

connection.addListener('error', function(connectionException){ 
    sys.log(connectionException); 
}); 

request.addListener('response', function(response){ 
    var data = ''; 

    response.addListener('data', function(chunk){ 
     data += chunk; 
    }); 
    response.addListener('end', function(){ 
     // Do something with data. 
    }); 
}); 

request.end(); 
1

你需要調用結束()的請求,表明你已準備好發送。你也應該爲你的請求添加一個用戶代理標題。許多Web服務器都在尋找它。

console.log('preparing request to ' + url) 
u = require('url').parse(url) 
var remote_client = http.createClient(80, u['host']); 
var request = remote_client.request("GET", u['pathname'], {"host": u['host'], 
                  "user-agent": "node.js"}); 
console.log("request made") 

request.addListener('response', function (response) { 
    response.setEncoding('binary') 
    var body = ''; 

    response.addListener('data', function (chunk) { 
     body += chunk; 
     console.log('chunk received') 
    }); 
}); 

request.end();