Javascript 节点JS+;DIME-在POST中发送二进制数据
有一个1740字节长的文件,它的内容被读取到一个缓冲区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服
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请求,我使用相同的头。也许节点本身添加了一些额外的头?