2011-01-26 35 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();