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


135

我尝试使用GET进行二进制数据处理request,结果如下:

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但没有帮助。

如何获取二进制数据?

Answers:


300

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

encoding: null

然后body将是类型Buffer,而不是默认类型string。


50
真是荒唐的噩梦。花了我12个小时来追捕这个问题。似乎默认情况下,Node Request模块将响应内容中的传入数据视为UTF-8,并自动将任何非UTF-8字节序列转换为垃圾字符(但有效的UTF-8)。没有多少设置'mimetype'等有效(不是应该用于响应数据),这encoding: null是唯一有效的选项,而且-记录非常少。在Node Request文档中应该有关于如何操作的明显警告。来检索纯二进制数据,谢谢!
Dan Nissenbaum 2015年

2
@StoyanBerov,很高兴您发现这个答案很有帮助,但是自从我写了这个答案以来的5年中,该软件包的自述文件已得到更正,以在多个地方强调该解决方案。另外,我强烈建议使用支持Promises的软件包而不是此软件包。
GilZ

@Gilz,感谢您的更新!实际上,我的印象是默认情况下编码设置为null。同样,问题出在一个旧项目上,该项目设置为超旧节点版本,并且在任何地方都只有回调。
斯托扬·贝罗夫'18

再次尝试-很久没有使用此功能了。编码:救援无效
Pyro

0

接受的答案不能解决我的问题。我以某种方式认为这gzip: true可行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.