2012-08-01 13 views
12

Estoy solicitando un archivo remoto usando https.request en node.js. No estoy interesado en recibir todo el archivo, solo quiero lo que está en el primer fragmento.Cómo finalizar una solicitud http de node.js early

var req = https.request(options, function (res) { 
    res.setEncoding('utf8'); 

    res.on('data', function (d) { 
     console.log(d); 
     res.pause(); // I want this to end instead of pausing 
    }); 
}); 

Quiero dejar de recibir la respuesta por completo después del primer trozo, pero aún no hay métodos de cierre o final, sólo una pausa y reanudar. Mi preocupación al utilizar la pausa es que una referencia a esta respuesta estará rondando indefinidamente.

¿Alguna idea?

+0

No es [encabezado HTTP] (http://en.wikipedia.org/wiki/List_of_HTTP_header_fields) llamado 'Rango'. 'Rango: bytes = 0-1023' para descargar primero KiBi solamente, por ejemplo. Por cierto, ¿no hay 'res.end()'? – elmigranto

+1

Puedes simplemente res.end(); – Rajat

+1

Lamentablemente no, res.end() no existe dentro de la función de devolución de llamada. –

Respuesta

14

Pop esto en un archivo y ejecútelo. Es posible que tenga que ajustar a su local de Google, si usted ve una respuesta 301 de redirección de Google (que se envía como un solo trozo, creo.)

var http = require('http'); 

var req = http.get("http://www.google.co.za/", function(res) { 
    res.setEncoding(); 
    res.on('data', function(chunk) { 
    console.log(chunk.length); 
    res.destroy(); //After one run, uncomment this. 
    }); 
}); 

ver que res.destroy() realmente funciona, elimine, y el objeto de respuesta seguirá emitiendo eventos hasta que se cierre solo (en cuyo punto el nodo saldrá de este script).

También experimenté con res.emit('end'); en lugar del destroy(), pero durante una de mis ejecuciones de prueba, aún se activaron algunas partes de llamada adicionales. destroy() parece ser un "fin" más inminente.

la documentación para el método destroy están aquí: http://nodejs.org/api/stream.html#stream_stream_destroy

embargo, usted debe comenzar a leer aquí: (. Que establece que el objeto respuesta implementa la interfaz de tren legible) http://nodejs.org/api/http.html#http_http_clientresponse

+3

¡Perfecto! destroy() funciona como un regalo. ¡Muchas gracias! –

+3

parece que ya no existe. –

+0

¿Hay una clave de estado donde podamos verificar si la solicitud se destruye o no? – Tushar

Cuestiones relacionadas