Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点JS+;DIME-在POST中发送二进制数据_Javascript_Node.js_Http_Binary Data - Fatal编程技术网

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

Javascript 节点JS+;DIME-在POST中发送二进制数据,javascript,node.js,http,binary-data,Javascript,Node.js,Http,Binary Data,有一个1740字节长的文件,它的内容被读取到一个缓冲区resres.length是1740,而res.toString('binary',0,res.length)。length也是1740 我使用requestlib发送POST请求 request.post({ url: endpoint, headers: headers, body: res.toString('binary', 0, res.length) }, callback); 该请求发送到gSOAP服

有一个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
,因此按如下所述进行转换:

我尝试设置
encoding:'binary'
encoding:null
来请求参数,结果相同(使用
encoding:null
我只将错误消息作为缓冲区,但仅此而已)

我尝试使用
https
库,并在请求中添加一个streen,结果相同

向你问好,亚历山大

编辑

目前,我找到了一个cURL的解决方法,只需从cli发送一个请求,其中包含
--data binary“@file\u”,我将该请求转储到\u中即可。但是应用程序和nodejs服务器本身是在安装程序中提供的,所以我们也必须在用户的机器上安装cURL,这是。。。可以接受,但不是最佳选择

那么有没有办法用nodejs发送一个二进制POST主体呢


谢谢。

不要使用
二进制
字符串编码:它已被弃用(),只有当“另一端”将其解码回缓冲区时才有意义

直接使用缓冲区即可:

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

嘿,罗伯特,谢谢你的回复,但我已经尝试发送了
缓冲区
对象,DIME也出现了相同的错误。@strife那么服务器上接收的数据量也超过了1740字节吗?@strife将缓冲区作为主体发送将阻止节点对数据进行任何处理(类似于
--data binary
)。如果它不起作用,我想知道是否还有其他问题导致了您的问题(可能是缺少/不正确的头?@strife如何将文件读入节点?只是一个普通的
fs.readFile()
fs.readFileSync()
我猜?头很好,为了形成一个cURL请求,我使用相同的头。也许节点本身添加了一些额外的头?