如何在 NodeJS 中 url 解码 POST 请求
How to url decode a POST request in NodeJS
我有一个 NodeJS 代理,它接受一个请求,进行一些混淆处理,然后将请求传递给另一个服务器。最近我们需要进行更改以引入另一个我们不拥有的代理,看起来这个代理导致请求被双 url 编码。作为临时解决方法,我想在必要时解码请求的主体(这个新代理将存在于某些环境中,而不存在于其他环境中)。我四处寻找如何做到这一点,似乎 'decodeURIComponent' 是我想要的,但是当我尝试使用它时出现 malformedURI 异常,所以我想知道我是否正在使用这是错误的,或者它不适合这种情况。
正在尝试 url 解码请求正文:
decodeDoubleEncodedBuffer = function(buffer) {
var buffString;
if (Buffer.isBuffer(buffer)) {
buffString = buffer.toString();
} else {
buffString = buffer;
}
if (Config.requireURLDecode) {
return new Buffer(decodeURIComponent(buffString));
} else {
return new Buffer(buffString);
}
};
...
body = new Buffer(0)
req.addListener('data', function(chunk) {
return body = Buffer.concat([body, decodeDoubleEncodedBuffer(chunk)]);
});
有了这个我得到以下错误:
return new Buffer(decodeURIComponent(buffString));
^
URIError: URI malformed at decodeURIComponent (native)
...
正在修改的原始监听代码如下
body = new Buffer(0);
req.addListener('data', function(chunk) {
return body = Buffer.concat([body, Buffer.isBuffer(chunk) ? chunk : new Buffer(chunk)]);
});
谢谢!
好吧,我意识到了两件事,如果算上的话可能是 3 件事 "I'm dumb"。 1) 正文中的内容被 gzip 压缩 json,如果解压缩,我的内容工作正常,2) 我想解码的内容在 url 中,而不是正文中......哪个为什么它首先被任何东西编码是有道理的。我不知道 post 正文被百分比编码是否正常,但无论哪种方式我都觉得很愚蠢哈哈。
所以我想答案是,我提供的代码对于有效的 url 个字符可以正常工作。
我有一个 NodeJS 代理,它接受一个请求,进行一些混淆处理,然后将请求传递给另一个服务器。最近我们需要进行更改以引入另一个我们不拥有的代理,看起来这个代理导致请求被双 url 编码。作为临时解决方法,我想在必要时解码请求的主体(这个新代理将存在于某些环境中,而不存在于其他环境中)。我四处寻找如何做到这一点,似乎 'decodeURIComponent' 是我想要的,但是当我尝试使用它时出现 malformedURI 异常,所以我想知道我是否正在使用这是错误的,或者它不适合这种情况。
正在尝试 url 解码请求正文:
decodeDoubleEncodedBuffer = function(buffer) {
var buffString;
if (Buffer.isBuffer(buffer)) {
buffString = buffer.toString();
} else {
buffString = buffer;
}
if (Config.requireURLDecode) {
return new Buffer(decodeURIComponent(buffString));
} else {
return new Buffer(buffString);
}
};
...
body = new Buffer(0)
req.addListener('data', function(chunk) {
return body = Buffer.concat([body, decodeDoubleEncodedBuffer(chunk)]);
});
有了这个我得到以下错误:
return new Buffer(decodeURIComponent(buffString));
^
URIError: URI malformed at decodeURIComponent (native)
...
正在修改的原始监听代码如下
body = new Buffer(0);
req.addListener('data', function(chunk) {
return body = Buffer.concat([body, Buffer.isBuffer(chunk) ? chunk : new Buffer(chunk)]);
});
谢谢!
好吧,我意识到了两件事,如果算上的话可能是 3 件事 "I'm dumb"。 1) 正文中的内容被 gzip 压缩 json,如果解压缩,我的内容工作正常,2) 我想解码的内容在 url 中,而不是正文中......哪个为什么它首先被任何东西编码是有道理的。我不知道 post 正文被百分比编码是否正常,但无论哪种方式我都觉得很愚蠢哈哈。
所以我想答案是,我提供的代码对于有效的 url 个字符可以正常工作。