Estoy leyendo los documentos en http://nodejs.org/docs/v0.4.0/api/http.html#http.request , pero por alguna razón, parece que no puedo encontrar el atributo body / data en el objeto de respuesta devuelto, terminado.
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
Está terminado (http.get lo hace por usted), por lo que debería tener algún tipo de contenido. Pero no hay cuerpo, ni datos, y no puedo leerlo. ¿Dónde se esconde el cuerpo?

datase realizan los eventos ...resescuche"end"( nodejs.org/docs/latest/api/http.html#event_end_ )Respuestas:
http.request docs contiene ejemplos de cómo recibir el cuerpo de la respuesta a través del
dataevento de manejo :http.get hace lo mismo que http.request excepto que llama
req.end()automáticamente.fuente
res.setEncoding('utf8');al ejemplo http.get. De lo contrario, no obtuve HTML en lachunkvariable.POST requests typically use a response body, not GET.publicación tiene un cuerpo y la solicitud GET no, pero una respuesta GET puede tener un cuerpo.También quiero agregar que el
http.ClientResponsedevuelto porhttp.get()tiene unendevento, así que aquí hay otra forma en que recibo la respuesta del cuerpo:fuente
http.ClientResponseno es devuelto porhttp.get()http.ClientRequestes, de acuerdo con la documentación actual y la documentación vinculada al póster original.Editar: respondiendo a mí mismo 6 años después
La palabra clave esperar es la mejor manera de obtener una respuesta de una solicitud HTTP, evitando devoluciones de llamada y
.then()También deberá usar un cliente HTTP que devuelva Promesas.
http.get()todavía devuelve un objeto Solicitud, por lo que no funcionará. Podría usarfetch, perosuperagentes un cliente HTTP maduro que presenta valores predeterminados más razonables, incluida una codificación de cadena de consulta más simple, que usa correctamente los tipos mime, JSON de forma predeterminada y otras características comunes del cliente HTTP.awaitesperará hasta que Promise tenga un valor, en este caso, ¡una respuesta HTTP!Usando esperar, el control simplemente pasa a la siguiente línea una vez que la promesa devuelta
superagent.get()tiene un valor.fuente
resse establece en el valor de retorno desuperagent.get(), nohttp.get().http.get()devuelve unhttp.IncomingMessageque no tiene unatextpropiedad. No es el objeto de respuesta, es el objeto de solicitud.El
dataevento se dispara varias veces con 'fragmentos' del cuerpo a medida que se descargan y unendevento cuando todos los fragmentos se han descargado.Ahora que Node admite Promesas , creé un contenedor simple para devolver los fragmentos concatenados a través de una Promesa:
Puede llamarlo desde una función asíncrona con:
fuente
Si quieres usar .get puedes hacerlo así
fuente
chunk.toString(), opcionalmente pasandotoStringy codificando. Dicho esto,setEncodinges probable que sea más eficiente.Debe agregar un escucha a la solicitud porque node.js funciona de forma asíncrona de esa manera:
fuente
El módulo de aguja también es bueno, aquí hay un ejemplo que usa el
needlemódulofuente
Una porción de café aquí:
Y compilado
fuente
No puede obtener el cuerpo de la respuesta a partir del valor de retorno de
http.get().http.get()no devuelve un objeto de respuesta. Devuelve el objeto de solicitud (http.clientRequest). Por lo tanto, no hay forma de obtener el cuerpo de la respuesta a partir del valor de retorno dehttp.get().Sé que es una pregunta antigua, pero leer la documentación que vinculaste muestra que este era el caso incluso cuando la publicaste.
fuente