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

Gil*_*ilZ 125 javascript binaryfiles request node.js requestjs

我正在尝试GET使用二进制数据request,并有类似的东西:

var requestSettings = {
    method: 'GET',
    url: url,
};
request(requestSettings, function(error, response, body) {
    // Use body as a binary Buffer
}
Run Code Online (Sandbox Code Playgroud)

body总是与预期的几个字节不同.经过进一步调查后,我发现request假设body是字符串并替换了所有非unicode字节.

我试着补充一下

encoding: 'binary'
Run Code Online (Sandbox Code Playgroud)

requestSettings,但它并没有帮助.

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

Gil*_*ilZ 281

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

encoding: null
Run Code Online (Sandbox Code Playgroud)

然后body是类型Buffer,而不是默认值,即字符串.

  • 多么荒谬的噩梦.花了我12个小时来追捕它.默认情况下,节点请求模块似乎将响应内容中的传入数据视为UTF-8,并自动将任何非UTF-8字节序列转换为垃圾(但有效的UTF-8)字符.没有任何设置'mimetype'等工作(不是它应该用于*response*数据).`encoding:null`是唯一可行的选项.而且 - 记录很差.应该有一个明显的警告在节点请求文档中有关如何检索纯二进制数据.谢谢! (44认同)
  • @StoyanBerov,很高兴您发现这个答案很有帮助,但是自从我写了这个答案以来的5年中,该软件包的自述文件已得到更正,以在多个地方强调该解决方案。另外,我强烈建议使用支持Promises的软件包而不是此软件包。 (2认同)