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

142

我试图使用 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'
< p>要< code>requestSettings ,但它没有帮助。< p>我该如何获取二进制数据?

新手须知,来自GitHub: "从2020年2月11日起,request已完全弃用"。最好寻找替代方案。 - Skippy le Grand Gourou
2个回答

318

好的,经过大量的搜寻,我发现requestSettings应该有:

encoding: null

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


58
多么荒谬的噩梦,我花了12个小时才找到这个。似乎Node Request模块默认将响应内容中的传入数据视为UTF-8,并自动将任何非UTF-8字节序列转换为垃圾(但有效的UTF-8)字符。无论如何设置“mimetype”等都不起作用(并且不应该针对响应数据)。encoding: null是唯一可行的选项。而且,文档记录得非常糟糕。在Node Request文档中应该明确警告如何检索纯二进制数据。谢谢! - Dan Nissenbaum
3
@StoyanBerov,我很高兴你发现这个答案有帮助,但是自从我写下这个答案以来已经过去了5年,软件包自述文件已经在多个地方进行了修改以突出显示这个解决方案。此外,我强烈建议使用支持 Promises 的软件包,而不是使用这个软件包。 - GilZ
@Gilz,感谢更新!我实际上认为编码默认设置为空。此外,这个问题出现在一个旧的项目中,使用了超级老的节点版本和仅回调函数。 - Stoyan Berov

1
被接受的答案没有解决我的问题。我想到了使用 gzip: true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接