Javascript 使用请求获取Node.js中的二进制内容

Javascript 使用请求获取Node.js中的二进制内容,javascript,node.js,request,binaryfiles,requestjs,Javascript,Node.js,Request,Binaryfiles,Requestjs,我试图使用获取二进制数据,结果是: var requestSettings = { method: 'GET', url: url, }; request(requestSettings, function(error, response, body) { // Use body as a binary Buffer } 但是body总是与预期的不同几个字节。经过进一步调查,我发现请求假定正文是字符串,并替换了所有非unicode字节 我试图补充 encoding: '

我试图使用
获取
二进制数据,结果是:

var requestSettings = {
    method: 'GET',
    url: url,
};
request(requestSettings, function(error, response, body) {
    // Use body as a binary Buffer
}
但是
body
总是与预期的不同几个字节。经过进一步调查,我发现
请求
假定
正文
是字符串,并替换了所有非unicode字节

我试图补充

encoding: 'binary'
请求设置,但没有帮助


如何获取二进制数据?

好的,经过大量挖掘,我发现
requestSettings
应该有:

encoding: null

然后
body
将是
Buffer
类型,而不是默认的字符串。

接受的答案没有解决我的问题。我不知怎的觉得
gzip:true
奏效了。

多么荒谬的噩梦。我花了12个小时才找到这个。节点请求模块似乎在默认情况下将响应内容中的传入数据视为UTF-8,并自动将任何非UTF-8字节序列转换为垃圾(但有效的UTF-8)字符。“mimetype”等设置都不起作用(这并不是响应数据应该起的作用).The
encoding:null
是唯一有效的选项。而且-文档记录得非常糟糕。关于如何检索纯二进制数据,节点请求文档中应该有一个明显的警告。谢谢!@StoyanBerov,我很高兴你发现这个答案很有帮助,但在我编写这个答案的5年里,包自述被更正了在多个地方突出显示此解决方案。此外,我强烈建议使用支持承诺的包而不是此包。@Gilz,感谢更新!我的印象是默认情况下编码设置为null。此外,此问题出现在一个遗留项目中,设置为超旧节点版本,并且仅在所有地方回调重新。