Node JS + DIME - 在 POST 中发送二进制数据

Node JS + DIME - sending binary data in POST

有一个 1740 字节长的文件,它的内容被读取到缓冲区 resres.length是1740,res.toString('binary', 0, res.length).length也是1740。

我使用 request lib

发送了一个 POST 请求
 request.post({
    url: endpoint,
    headers: headers,
    body: res.toString('binary', 0, res.length)
}, callback);

请求转到 gSOAP 服务器。通过对我发送请求的服务器进行数小时的调试,我们发现如下:到达服务器的请求是 1753 字节长,并且一些字符被转换。特别是,十六进制 B7 变为 C2 B7,因此按照此处所述进行转换:http://www.fileformat.info/info/unicode/char/b7/index.htm

我尝试设置 encoding: 'binary'encoding: null 来请求参数,结果相同(encoding : null 我只收到错误消息作为缓冲区,仅此而已)。

我尝试使用 https 库并将 strean 管道传输到请求中,结果相同。

最好的问候,亚历山大

编辑

目前,我找到了一个使用 cURL 的解决方法,只需使用 --data-binary "@file_to_which_i_dumped_the_request"' 从 cli 发送请求即可。但是应用程序和 nodejs 服务器本身是在安装程序中提供的,所以我们也必须在用户的机器上安装 cURL,这是......可以接受,但不是最佳选择。

那么有没有办法用 nodejs 发送二进制 POST 主体?

谢谢。

不要使用 binary 字符串编码:它已被弃用 (see here),只有当 "the other side" 将其解码回缓冲区时才有意义。

直接使用缓冲区即可:

request.post({
  url     : endpoint,
  headers : headers,
  body    : res
}, callback);