Использование node.js HTTP-запроса удаленного клиента не возвращает никакого тела

Я использую node.js для загрузки веб-страницы. Однако он не получает никаких фрагментов данных:

    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

Это пример, который всегда работал у меня:

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

Ответ 2

Вам нужно вызвать end() в запросе, чтобы сообщить, что вы готовы отправить его. Также вы должны добавить заголовок пользовательского агента в свой запрос. Многие веб-серверы ищут его.

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