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

IT技术 javascript node.js request binaryfiles requestjs
2021-01-13 13:09:06

我试图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,但它并没有帮助。

我怎样才能得到二进制数据?

2个回答

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

encoding: null

然后body将是 type Buffer,而不是默认值,即字符串。

@Gilz,感谢更新!实际上,我的印象是编码默认设置为 null。此外,这个问题出现在一个遗留项目中,设置为一个超级旧的节点版本和仅回调无处不在。
2021-03-27 13:09:06
多么荒谬的噩梦。我花了 12 个小时才找到它。默认情况下,节点请求module似乎将响应内容中的传入数据视为 UTF-8,并自动将任何非 UTF-8 字节序列转换为垃圾(但有效的 UTF-8)字符。没有多少设置“mimetype”等工作(不是它应该用于响应数据)。这encoding: null是唯一有效的选项。而且 - 记录很差。节点请求文档中应该有一个明显的警告,说明如何检索纯二进制数据。谢谢!
2021-03-30 13:09:06
@StoyanBerov,我很高兴你发现这个答案有帮助,但是在我写这个答案的 5 年里,包自述文件被更正以在几个地方突出这个解决方案。另外,我强烈推荐使用支持 Promises 的包而不是这个包。
2021-03-31 13:09:06

接受的答案并没有解决我的问题。我以某种方式认为这gzip: true有效。