如何在 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 个字符可以正常工作。