我有一个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)]);
});
谢谢!
答案 0 :(得分:0)
好的,我意识到了两件事,如果算上“我是愚蠢的”,可能会有3件事。 1)身体中的内容是gzip压缩json,如果它解压缩,我的工作正常,2)我想在网址中解码WAS的内容,而不是在身体中解码...这有意义为什么它被编码了什么都放在第一位。我不知道一个帖子的身体是否是正常的百分比编码,但无论哪种方式我都觉得愚蠢哈哈。
所以我想答案是,我提供的代码可以正常用于有效的网址字符。