2016-04-02 19 views
0

要求を受け取り、難読化して別のサーバーに要求を渡すNodeJSプロキシがあります。最近、私たちが所有していない別のプロキシを導入するために変更を加える必要がありました。このプロキシが要求を二重にエンコードするようになっているようです。一時的な回避策として、必要に応じてリクエストの本文をデコードしたい(この新しいプロキシは、他の環境ではなく一部の環境に存在する)。私はこれを行う方法について見てきました、そして、それは '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) 
    ... 

元リスナーのコードが変更されているURLデコードリクエストボディにしようと

うまく動作します。

body = new Buffer(0); 

req.addListener('data', function(chunk) { 
    return body = Buffer.concat([body, Buffer.isBuffer(chunk) ? chunk : new Buffer(chunk)]); 
}); 

ありがとうございます!

答えて

0

私は2つのことを実感しました。もしあなたが「私は愚かです」と数えれば3かもしれません。 1)ボディの内容がgsonでjsonされていて、解凍されていればうまくいきました.2)WASをURLでデコードしたいコンテンツです。本文ではなく、なぜエンコードされているのかが分かります。最初のものは何でも。ポストボディがエンコードされているのが普通かどうかは分かりませんが、いずれにしても私は馬鹿だと感じます。

私は答えたと思います。私が提供したコードは、有効なURL文字で正常に動作します。

関連する問題