Node.js'de istek kullanarak ikili içerik alma


136

Ben GETkullanarak bir ikili veri çalışıyordum ve şöyle bir requestşey vardı:

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

Ancak bodyher zaman beklenenden birkaç bayt farklıydı. Daha fazla araştırma sonra ben öğrendim requestvarsaydıkları bodyolmayan tüm unicode bayt dizedir ve yerini aldı.

Eklemeye çalıştım

encoding: 'binary'

için requestSettingsama yardımcı olmadı.

İkili verileri nasıl alabilirim?

Yanıtlar:


301

Tamam, bir sürü kazmadan sonra, bunun requestSettingsolması gerektiğini öğrendim :

encoding: null

Ve sonra dize olan varsayılan yerine bodytür olacaktır Buffer.


51
Ne saçma bir kabus. Bunu avlamam 12 saat sürdü. Düğüm İsteği modülünün varsayılan olarak yanıt içeriğindeki gelen verileri UTF-8 olarak ele alır ve UTF-8 olmayan bayt dizilerini otomatik olarak önemsiz (ancak geçerli UTF-8) karakterlere dönüştürür. Hiçbir ayar 'mime türü ", vb çalışır ( yanıt verisi için olması gerekiyordu değil ). encoding: nullÇalışır tek seçenek olduğunu ve - çok kötü belgelenmiş. Düğüm isteği belgelerinde nasıl açık bir uyarı olması gerekir - İkili veriyi almak için teşekkürler
— Dan Nissenbaum

2
@StoyanBerov, bu cevabı yararlı bulduğunuza sevindim, ancak bu cevabı yazdığımdan itibaren 5 yıl içinde, benioku paketi bu çözümü birkaç yerde vurgulamak için düzeltildi. Ayrıca, bu paket yerine Promises'ı destekleyen bir paket kullanmanızı şiddetle tavsiye ederim.
— GilZ

@Gilz, güncelleme için teşekkürler! Aslında kodlamanın varsayılan olarak null olarak ayarlandığı izlenimi altındaydım. Ayrıca, sorun, eski bir düğüm sürümüne ve yalnızca her yerde geri çağrılara ayarlanmış eski bir projede ortaya çıktı.
— Stoyan Berov

Tekrar karşılaştım - bunu çağlarda kullanmadım. Kodlama: kurtarmaya null
— Pyro

0

Kabul edilen cevap sorunumu çözmedi. Bir şekilde gzip: trueçalıştığını anladım .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.