2013-02-13 14 views
89

starałem się GET do danych binarnych za pomocą request i miał coś takiego:Pierwsze zawartości binarnej w node.js użyciu żądania

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

Ale body było zawsze kilka bajtów różni się od oczekiwano. Po dalszych badaniach dowiedziałem się, że request zakłada body jest ciągiem znaków i zastępuje wszystkie bajty inne niż Unicode.

Próbowałem dodać

encoding: 'binary' 

do requestSettings ale to nie pomogło.

Jak mogę uzyskać dane binarne?

Odpowiedz

188

OK, po dużo kopania, okazało się, że requestSettings powinien mieć:

encoding: null 

A potem body będzie od rodzaju Buffer, zamiast domyślnego, który jest ciągiem.

+15

Działa doskonale, dzięki. Jest to jednak całkowicie nieintuicyjne ze względu na moduł żądania. –

+26

Co za absurdalny koszmar. Zajęło mi to 12 godzin, aby to polować. Wygląda na to, że moduł żądania węzła domyślnie traktuje przychodzące dane w treści odpowiedzi jako UTF-8 i automatycznie konwertuje wszystkie sekwencje bajtów innych niż UTF-8 na niepotrzebne (ale poprawne znaki UTF-8). Żadna ilość ustawienia typu "mimetype" itp. Nie działa (nie ma to miejsca w przypadku danych * odpowiedzi *). "Kodowanie: null" jest jedyną opcją, która działa, i - bardzo słabo udokumentowana. Powinno być oczywiste ostrzeżenie w węźle Poproś o dokumentację, jak odzyskać czyste dane binarne. Dzięki! –

+0

@DanNissenbaum samo doświadczenie tutaj po prostu niesamowite – Novellizator

Powiązane problemy