Node JS + DIME - 在 POST 中发送二进制数据
Node JS + DIME - sending binary data in POST
有一个 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
库并将 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);
有一个 1740 字节长的文件,它的内容被读取到缓冲区 res
。 res.length
是1740,res.toString('binary', 0, res.length).length
也是1740。
我使用 request
lib
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);