如何解码NodeJS中的POST请求
问题描述:
我有一个NodeJS代理,它接受请求,执行一些混淆处理,然后将请求传递给另一个服务器。最近我们需要进行更改以引入另一个我们不拥有的代理,并且它看起来像这个代理导致请求被双重url编码。作为临时解决方法,我想在必要时解码请求的主体(此新代理将存在于某些环境中,而不存在于其他环境中)。我已经四处寻找如何做到这一点,它看起来像'decodeURIComponent'是我想要的,但是当我尝试使用它时,我得到一个malformedURI异常,所以我想知道如果我使用它错误,或者它不适合这种情况。如何解码NodeJS中的POST请求
试图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,如果你算“我很笨”。 1)正文中的内容是gzip json,如果解压缩的话我可以正常工作,2)我想在URL中解码WAS的内容,而不是在正文中......这有意义为什么它被编码为任何东西在首位。我不知道一个帖子主体是否被百分比编码是正常的,但是无论如何我觉得愚蠢的哈哈。
所以我想答案是,我提供的代码将有效的url字符工作正常。