2013-02-13 58 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