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

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

我使用request库发送POST请求

  request.post({ url: endpoint, headers: headers, body: res.toString('binary', 0, res.length) }, callback); 

请求转到gSOAP服务器。 通过在服务器上debugging几个小时来发送请求,我们发现:服务器发出的请求长度为1753字节,有些字符被转换。 特别是,hexB7变为C2 B7 ,所以按照此处所述进行转换: http : //www.fileformat.info/info/unicode/char/b7/index.htm

我尝试设置encoding: 'binary'encoding: null请求参数,相同的结果(与encoding : null我只收到错误消息作为缓冲区,但就是这样)。

我尝试使用https库和pipe道strean到请求,相同的结果。

最好的问候,亚历山大

编辑

目前,我发现了一个解决方法,用cURL发送一个来自cli的请求--data-binary "@file_to_which_i_dumped_the_request"'这样做。 但是应用程序和nodejs服务器本身是在一个安装程序中发布的,所以我们必须在用户的机器上安装cURL,这是可以接受的,但不是最好的select。

那么有没有办法发送一个二进制POST body与nodejs?

谢谢。

不要使用binarystring编码:它已被弃用( 见这里 ),只有“另一端”将它解码回缓冲区才有意义。

直接使用缓冲区:

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