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

时间:2015-08-20 15:49:36

标签: javascript node.js http binary-data

有一个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发送请求。但app和nodejs服务器本身是在安装程序中提供的,所以我们必须在用户的机器上安装cURL,这是可以接受的,但不是最佳选择。

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

感谢。

1 个答案:

答案 0 :(得分:2)

不要使用binary字符串编码:它已被弃用(see here),只有"另一方"才有意义。将它解码回缓冲区。

直接使用缓冲区:

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