Estou lendo os documentos em http://nodejs.org/docs/v0.4.0/api/http.html#http.request , mas por algum motivo, não consigo encontrar o atributo body / data no objeto de resposta retornado e finalizado.
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
Está concluído (http.get faz isso por você), portanto, ele deve ter algum tipo de conteúdo. Mas não há corpo, nem dados, e eu não consigo ler. Onde o corpo está escondido?
data
eventos são feitas .. ter seures
ouvir"end"
( nodejs.org/docs/latest/api/http.html#event_end_ )Respostas:
Os documentos http.request contêm exemplo de como receber o corpo da resposta por meio do
data
evento de manipulação :http.get faz o mesmo que http.request, exceto que ele chama
req.end()
automaticamente.fonte
res.setEncoding('utf8');
ao exemplo http.get. Caso contrário, não obtive HTML nachunk
variável.POST requests typically use a response body, not GET.
postagem tem um corpo e a solicitação GET não, mas uma resposta GET pode ter um corpo.Também quero acrescentar que o
http.ClientResponse
retornado porhttp.get()
tem umend
evento, então aqui está outra maneira de receber a resposta do corpo:fonte
http.ClientResponse
não é retornado porhttp.get()
http.ClientRequest
is, de acordo com a documentação atual e a documentação vinculada pelo pôster original.Edit: respondendo a si mesmo 6 anos depois
A palavra - chave wait é a melhor maneira de obter uma resposta de uma solicitação HTTP, evitando retornos de chamada e
.then()
Você também precisará usar um cliente HTTP que retorne promessas.
http.get()
ainda retorna um objeto Request, para que não funcione. Você poderia usarfetch
, massuperagent
é um cliente HTTP maduro, que possui padrões mais razoáveis, incluindo codificação de cadeia de consulta mais simples, usando corretamente tipos MIME, JSON por padrão e outros recursos comuns do cliente HTTP.await
esperará até que a Promessa tenha um valor - nesse caso, uma resposta HTTP!Usando aguardar, o controle simplesmente passa para a próxima linha quando a promessa retornada por
superagent.get()
tiver um valor.fonte
res
é definido como o valor de retorno desuperagent.get()
, nãohttp.get()
.http.get()
retorna umhttp.IncomingMessage
que não possui umatext
propriedade. Não é o objeto de resposta, é o objeto de solicitação.O
data
evento é disparado várias vezes com 'pedaços' do corpo à medida que são baixados e umend
evento quando todos os pedaços foram baixados.Com o Nó suportando Promises agora, criei um wrapper simples para retornar os pedaços concatenados por meio de um Promise:
Você pode chamá-lo de uma função assíncrona com:
fonte
Se você deseja usar .get, pode fazê-lo assim
fonte
chunk.toString()
, opcionalmente passandotoString
e codificando. Dito isto,setEncoding
é provavelmente mais eficiente.Você precisa adicionar um ouvinte à solicitação porque o node.js funciona de forma assíncrona assim:
fonte
O módulo de agulha também é bom, aqui está um exemplo que usa o
needle
módulofonte
Uma porção de café aqui:
E compilado
fonte
Você não pode obter o corpo da resposta a partir do valor de retorno de
http.get()
.http.get()
não retorna um objeto de resposta. Retorna o objeto de solicitação (http.clientRequest
). Portanto, não há como obter o corpo da resposta a partir do valor de retorno dehttp.get()
.Sei que é uma pergunta antiga, mas ler a documentação à qual você vinculou mostra que esse era o caso mesmo quando você a postou.
fonte