2013-02-13 88 views
89

使用request我試圖GET二進制數據獲取在Node.js的二進制內容,並有這樣的事情:使用要求

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

body總是幾個字節不同的預期。經過進一步調查,我發現request假設爲body是字符串,並替換了所有非Unicode字節。

我嘗試添加

encoding: 'binary' 

requestSettings,但它並沒有幫助。

如何獲取二進制數據?

回答

188

OK,大量挖掘後,我發現requestSettings應該有:

encoding: null 

然後body會,而不是默認的,這是字符串Buffer類型。

+15

工作完美,謝謝。但是這對於請求模塊來說是完全不直觀的。 – 2014-01-30 01:10:39

+26

這真是一個荒謬的噩夢。花了我12個小時來追捕這件事。看起來,Node Request模塊默認將響應內容中的傳入數據視爲UTF-8,並自動將任何非UTF-8字節序列轉換爲垃圾(但是有效的UTF-8)字符。沒有任何設置'mimetype'等等工作(不是它應該用於* response *數據)。'encoding:null'是唯一可用的選項。 - 記錄非常糟糕。應該有一個明顯的警告在節點請求文檔關於如何檢索純二進制數據。謝謝! – 2015-06-22 18:12:25

+0

@DanNissenbaum同樣的經驗在這裏!只是不可思議的 – Novellizator 2015-07-23 15:37:29