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.