如何解码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字符工作正常。