POST中的nodejs / express和二进制数据

我正在尝试将二进制数据发送到Express应用程序。只要我的值小于0x80,它就可以正常工作。如果单个值是0x80或更大,则会弄乱整个缓冲区。

快递处理程序:

binary = require('binary');

exports.api = function(req, res){

var body = req.body.name;

var buf = new Buffer(body,'binary');

console.log('body',req.body);

console.log('req body len', body.length);

console.log('buf len', buf.length);

var g = binary.parse(buf)

.word16bu('a') // unsigned 16-bit big-endian value

.word16bu('b').vars

console.log('g.a', g.a);

console.log('g.b', g.b);

res.send("respond with a resource");

};

Python客户端(内容类型:应用程序/ x-www-form-urlencoded):

import requests

from struct import pack

# send two unsigned shorts (16-bits each).

requests.post('http://localhost:3000/api', data={'name':pack('!HH',1,2)})

当数据= 1,2时表示输出。 。

body { name: '\u0000\u0001\u0000\u0002' }

req body len 4

buf len 4

g.a 1

g.b 2

POST /api 200 1ms - 23b

当数据= 1,0xFF时表示输出。有趣的是,9520实际上是十六进制的0x25 0x30,它对应于ASCII中的“%0”。是的,它似乎正在解析’%00%01

…’字符串。

body { name: '%00%01%00%FF' }

req body len 12

buf len 12

g.a 9520

g.b 12325

POST /api 200 2ms - 23b

回答:

原来是编码问题。似乎所有内容都默认为’utf8’,但在这种情况下,需要将其设置为’binary’。

例如:

var buf = new Buffer(body.toString('binary'),'binary');

同样重要的是,我需要将nodejs多方解析器的编码设置为’binary’。参见:https : //github.com/superjoe30/node-

multiparty/issues/37

以上是 POST中的nodejs / express和二进制数据 的全部内容, 来源链接: utcz.com/qa/424759.html

回到顶部