节点JS + DIME – 在POST中发送二进制数据
有一个1740字节长的文件,它的内容被读到一个Buffer res
。 res.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?
谢谢。
不要使用binary
string编码:它已被弃用( 见这里 ),只有“另一端”将它解码回缓冲区才有意义。
直接使用缓冲区:
request.post({ url : endpoint, headers : headers, body : res }, callback);