有一个1740字节长的文件,它的内容被读到缓冲区res
。res.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
库并管道流到请求中,结果相同。
致以最诚挚的问候,Alexander
编辑
此刻,我找到了一个解决cURL的方法,只是用--data-binary "@file_to_which_i_dumped_the_request"'
从cli发送一个请求。但是应用程序和nodejs服务器本身是在一个安装程序中发布的,所以我们也必须在用户的机器上安装cURL,这是…可以接受,但不是最好的选择。
所以有办法发送一个二进制POST体与nodejs?
谢谢。
不要使用binary
字符串编码:它已被弃用(见这里),只有当"另一方"将其解码回缓冲区时才有意义。
直接使用缓冲区:
request.post({
url : endpoint,
headers : headers,
body : res
}, callback);