Ottenere contenuti binari in Node.js usando request


136

Stavo provando a GETutilizzare dati binari requeste avevo qualcosa di simile:

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

Ma bodyera sempre qualche byte diverso dal previsto. Dopo ulteriori accertamenti ho scoperto che requestpresunto bodyè una stringa e ho sostituito tutti i byte non unicode.

Ho provato ad aggiungere

encoding: 'binary'

a requestSettingsma non ha aiutato.

Come posso ottenere i dati binari?

Risposte:


301

OK, dopo aver scavato molto, ho scoperto che requestSettingsavrebbe dovuto:

encoding: null

E quindi bodysarà di tipo Buffer, anziché predefinito, che è stringa.


51
Che assurdo incubo. Mi ci sono volute 12 ore per dare la caccia. Sembra che il modulo Richiesta nodo, per impostazione predefinita, tratta i dati in arrivo nel contenuto della risposta come UTF-8 e converte automaticamente qualsiasi sequenza di byte non UTF-8 in caratteri junk (ma UTF-8 validi). Nessuna impostazione di 'mimetype ", ecc. Funziona (non che si supponga per i dati di risposta ). L' encoding: nullunica opzione che funziona. E - molto scarsamente documentata. Dovrebbe esserci un ovvio avvertimento nella documentazione della Richiesta Nodo su come per recuperare dati binari puri. Grazie!
Dan Nissenbaum,

2
@StoyanBerov, sono contento che tu abbia trovato utile questa risposta, ma nei 5 anni da quando ho scritto questa risposta, il readme del pacchetto è stato corretto per evidenziare questa soluzione in diversi punti. Inoltre, consiglio vivamente di utilizzare un pacchetto che supporti Promises anziché questo pacchetto.
GilZ,

@Gilz, grazie per l'aggiornamento! In realtà avevo l'impressione che la codifica sia impostata su null per impostazione predefinita. Inoltre, il problema è emerso in un progetto legacy, impostato su una versione del nodo super vecchio e callbacks solo ovunque.
Stoyan Berov,

Ci siamo imbattuti di nuovo - non lo uso da secoli. Codifica: nulla in soccorso
Pyro

0

La risposta accettata non ha risolto il mio problema. In qualche modo ho pensato che gzip: truefunzionasse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.