2011-01-26 18 views
15

Estoy usando node.js para descargar una página web. Sin embargo, no está recibiendo ningún trozo de datos:Usar node.js La solicitud del cliente remoto HTTP no devuelve ningún cuerpo

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

El último mensaje de la consola es "solicitud realizada". No hay mensajes de consola con "fragmento recibido" o similar. ¿Pensamientos?

+1

se le olvidó request.end() – generalhenry

+0

También puede simplemente cambiar al uso de http.get() http://nodejs.org/docs/v0.3.6/api/http.html#http.get – generalhenry

+0

Sí, olvidas request.end(), pero usaría un contenedor en esta biblioteca sencilla. Consulte https://github.com/ry/node/wiki/modules => Por ejemplo [solicitud] (http://github.com/mikeal/node-utils/tree/master/request/), [node-wwwdude ] (http://github.com/pfleidi/node-wwwdude) por nombrar solo algunos. – Alfred

Respuesta

12

Este es un ejemplo que siempre trabajó para mí:

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

en desuso http.createClient desde 0.10 – Advanced

1

Es necesario colgar() sobre la solicitud para indicar que está listo para enviarlo. También debe agregar un encabezado de agente de usuario a su solicitud. Muchos servidores web lo buscan.

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