如何在NodeJS中url解码POST请求

时间:2016-04-02 22:00:34

标签: javascript node.js proxy urldecode

我有一个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)]);
});

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我意识到了两件事,如果算上“我是愚蠢的”,可能会有3件事。 1)身体中的内容是gzip压缩json,如果它解压缩,我的工作正常,2)我想在网址中解码WAS的内容,而不是在身体中解码...这有意义为什么它被编码了什么都放在第一位。我不知道一个帖子的身体是否是正常的百分比编码,但无论哪种方式我都觉得愚蠢哈哈。

所以我想答案是,我提供的代码可以正常用于有效的网址字符。