Saya membaca dokumen di http://nodejs.org/docs/v0.4.0/api/http.html#http.request , tetapi untuk beberapa alasan, saya sepertinya tidak dapat menemukan atribut body / data pada objek respons yang dikembalikan dan selesai.
> var res = http.get({host:'www.somesite.com', path:'/'})
> res.finished
true
> res._hasBody
true
Sudah selesai (http.get lakukan itu untuk Anda), jadi itu harus memiliki beberapa jenis konten. Tetapi tidak ada tubuh, tidak ada data, dan saya tidak bisa membacanya. Di mana tubuh bersembunyi?
data
acara selesai .. minta Andares
mendengarkan"end"
( nodejs.org/docs/latest/api/http.html#event_end_ )Jawaban:
http.request docs berisi contoh cara menerima isi respons melalui penanganan
data
acara:http.get melakukan hal yang sama dengan http.request kecuali ia memanggil
req.end()
secara otomatis.sumber
res.setEncoding('utf8');
contoh http.get. Kalau tidak, saya tidak mendapatkan HTML dalamchunk
variabel.POST requests typically use a response body, not GET.
posting memiliki tubuh dan permintaan GET tidak, tetapi respons GET dapat memiliki badan.Saya juga ingin menambahkan bahwa yang
http.ClientResponse
dikembalikan olehhttp.get()
memilikiend
acara, jadi di sini adalah cara lain yang saya terima tanggapan tubuh:sumber
http.ClientResponse
tidak dikembalikan olehhttp.get()
http.ClientRequest
, menurut dokumentasi saat ini dan dokumentasi yang ditautkan oleh pengirim aslinya.Sunting: membalas ke diri sendiri 6 tahun kemudian
Kata kunci yang menunggu adalah cara terbaik untuk mendapatkan respons dari permintaan HTTP, menghindari panggilan balik dan
.then()
Anda juga harus menggunakan klien HTTP yang mengembalikan Janji.
http.get()
masih mengembalikan objek Permintaan, sehingga itu tidak akan berfungsi. Anda dapat menggunakanfetch
, tetapisuperagent
merupakan klien HTTP dewasa yang memiliki fitur default yang lebih masuk akal termasuk pengkodean string kueri yang lebih sederhana, menggunakan jenis mime, JSON secara default, dan fitur klien HTTP umum lainnya.await
akan menunggu hingga Janji memiliki nilai - dalam hal ini, respons HTTP!Menggunakan menunggu, kontrol hanya berpindah ke baris berikutnya setelah janji dikembalikan oleh
superagent.get()
memiliki nilai.sumber
res
diatur ke nilai baliksuperagent.get()
, bukanhttp.get()
.http.get()
mengembalikan ahttp.IncomingMessage
yang tidak memilikitext
properti. Itu bukan objek respons, itu objek permintaan.The
data
event ditembakkan beberapa kali dengan 'potongan' dari tubuh sebagai mereka di-download danend
acara ketika semua potongan telah di-download.Dengan Node yang mendukung Janji sekarang, saya membuat pembungkus sederhana untuk mengembalikan potongan gabungan melalui Janji:
Anda dapat memanggilnya dari fungsi async dengan:
sumber
Jika Anda ingin menggunakan .get Anda dapat melakukannya seperti ini
sumber
chunk.toString()
, secara opsional meneruskantoString
dan menyandikan. Yang mengatakan,setEncoding
kemungkinan lebih efisien.Anda perlu menambahkan pendengar ke permintaan karena node.js berfungsi asinkron seperti itu:
sumber
Modul jarum juga bagus, berikut adalah contoh yang menggunakan
needle
modulsumber
Sebagian Kopi di sini:
Dan disusun
sumber
Anda tidak dapat memperoleh isi respons dari nilai pengembalian sebesar
http.get()
.http.get()
tidak mengembalikan objek respons. Ini mengembalikan objek permintaan (http.clientRequest
). Jadi, tidak ada cara untuk mendapatkan isi tanggapan dari nilai pengembalianhttp.get()
.Saya tahu ini adalah pertanyaan lama, tetapi membaca dokumentasi yang Anda tautkan menunjukkan bahwa ini adalah masalahnya bahkan ketika Anda mempostingnya.
sumber