如何在NodeJS中对POST请求进行url解码

How to url decode a POST request in NodeJS

本文关键字:url 解码 请求 POST NodeJS 中对      更新时间:2023-11-12

我有一个NodeJS代理,它接收一个请求,进行一些模糊处理,然后将请求传递给另一台服务器。最近,我们需要进行更改,以引入另一个我们不拥有的代理,看起来这个代理导致请求被双url编码。作为一种临时解决方法,我希望在必要时解码请求的主体(这个新代理将存在于某些环境中,而不是其他环境中)。我已经四处寻找了如何做到这一点,似乎"decodeURIComponent"是我想要的,但当我尝试使用它时,我会遇到一个格式错误的URI异常,所以我想知道我是用错了它,还是它不适合这种情况。

正在尝试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) 正文中的内容是gzipped json,如果它被解压缩,我所拥有的一切都很好,2)我想解码的内容在url中,而不是在正文中。。。这就是为什么它最初被任何东西编码的原因。我不知道一个贴体被百分比编码是否正常,但不管怎样,我都觉得很愚蠢。哈哈。

所以我想答案是,我提供的代码可以很好地用于有效的url字符。