Mendapatkan konten biner di Node.js menggunakan permintaan

136

Saya mencoba GETmenggunakan data biner request, dan memiliki sesuatu seperti:

var requestSettings = {
    method: 'GET',
    url: url,
};
request(requestSettings, function(error, response, body) {
    // Use body as a binary Buffer
}

Tetapi bodyselalu beberapa byte berbeda dari yang diharapkan. Setelah penyelidikan lebih lanjut, saya menemukan bahwa requestasumsi bodyadalah string dan menggantikan semua byte non-unicode.

Saya mencoba menambahkan

encoding: 'binary'

untuk requestSettingstetapi itu tidak membantu.

Bagaimana saya bisa mendapatkan data biner?

GilZ
sumber

Jawaban:

301

OK, setelah banyak menggali, saya menemukan bahwa requestSettingsseharusnya:

encoding: null

Dan kemudian bodyakan bertipe Buffer, bukan default, yaitu string.

GilZ
sumber
51
Mimpi buruk yang tidak masuk akal. Butuh waktu 12 jam untuk memburu ini. Tampaknya modul Node Request, secara default, memperlakukan data yang masuk dalam konten respon sebagai UTF-8, dan secara otomatis mengubah setiap sekuen byte non-UTF-8 menjadi karakter sampah (tetapi valid UTF-8). Tidak ada jumlah pengaturan 'mimetype ", dll berfungsi (bukan itu seharusnya untuk data respon ). Ini encoding: nulladalah satu-satunya pilihan yang bekerja. Dan - sangat buruk didokumentasikan. Seharusnya ada peringatan yang jelas dalam dokumentasi Permintaan Node tentang bagaimana untuk mengambil data biner murni. Terima kasih!
Dan Nissenbaum
2
@StoyanBerov, saya senang Anda menemukan jawaban ini bermanfaat, tetapi dalam 5 tahun sejak saya menulis jawaban ini, paket readme diperbaiki untuk menyoroti solusi ini di beberapa tempat. Selain itu, saya sangat merekomendasikan menggunakan paket yang mendukung Janji bukan paket ini.
GilZ
@ Gilz, terima kasih sudah memperbarui! Saya benar-benar mendapat kesan bahwa encoding diatur ke nol secara default. Juga, masalah muncul di proyek warisan, diatur ke versi node super lama dan hanya-callback di mana-mana.
Stoyan Berov
Tertabrak lagi - tidak pernah menggunakannya selama ini. Pengkodean: null to the rescue
Pyro
0

Jawaban yang diterima tidak menyelesaikan masalah saya. Entah bagaimana saya pikir itu gzip: trueberhasil.

gismatthew
sumber