2011-01-26 24 views
15

Tôi đang sử dụng node.js để tải xuống trang web. Tuy nhiên, nó không nhận được bất kỳ khối dữ liệu nào:Sử dụng yêu cầu ứng dụng khách từ xa node.js HTTP không trả lại bất kỳ nội dung nào

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') 
     }); 
    }); 

Thông báo bàn điều khiển cuối cùng là "yêu cầu được thực hiện". Không có tin nhắn điều khiển nào có "chunk received" hoặc tương tự. Suy nghĩ?

+1

bạn quên request.end() – generalhenry

+0

bạn cũng có thể chỉ chuyển sang sử dụng http.get() http://nodejs.org/docs/v0.3.6/api/http.html#http.get – generalhenry

+0

Yup bạn quên request.end(), nhưng tôi sẽ sử dụng một wrapper quanh thư viện đơn giản này. Xem https://github.com/ry/node/wiki/modules => Ví dụ [yêu cầu] (http://github.com/mikeal/node-utils/tree/master/request/), [node-wwwdude ] (http://github.com/pfleidi/node-wwwdude) để đặt tên chỉ là một vài. – Alfred

Trả lời

12

Đây là một ví dụ mà luôn luôn làm việc cho tôi:

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(); 
+0

không được chấp nhận http.createClient từ 0.10 – Advanced

1

Bạn cần phải gọi end() theo yêu cầu để báo hiệu rằng bạn đã sẵn sàng để gửi nó. Ngoài ra, bạn nên thêm tiêu đề tác nhân người dùng vào yêu cầu của mình. Nhiều máy chủ web tìm kiếm nó.

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(); 
Các vấn đề liên quan