2013-02-13 12 views
89

stavo cercando di GET un insieme di dati binari utilizzando request, e aveva qualcosa di simile:Ottenere contenuto binario in Node.js utilizzando richiesta

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

Ma body è sempre stato un paio di byte diverso dal previsto. Dopo ulteriori indagini ho scoperto che assunto body è una stringa e ha sostituito tutti i byte non unicode.

Ho provato ad aggiungere

encoding: 'binary' 

per requestSettings ma non ha aiutato.

Come posso ottenere i dati binari?

risposta

188

OK, dopo un sacco di scavo, ho scoperto che requestSettings dovrebbe avere:

encoding: null 

E poi body sarà di tipo Buffer, al posto del difetto, che è stringa.

+15

Ha funzionato perfettamente, grazie. Ma questo è completamente non intuitivo da parte del modulo di richiesta. –

+26

Che incubo assurdo. Mi ci sono voluti 12 ore per dare la caccia. Sembra che il modulo Node Request, per impostazione predefinita, tratti i dati in entrata nel contenuto della risposta come UTF-8 e converta automaticamente tutte le sequenze di byte non UTF-8 in caratteri junk (ma UTF-8 validi). Nessuna quantità di impostazione 'mimetype', ecc. Funziona (non che si supponga per i dati * response *.) La 'codifica: null' è l'unica opzione che funziona. E - molto scarsamente documentato. nella documentazione Node Request su come recuperare i dati binari puri Grazie! –

+0

@DanNissenbaum stessa esperienza qui! semplicemente incredibile – Novellizator

Problemi correlati