Node.js proxy, que trata con la descompresión de gzip

Actualmente estoy trabajando en un servidor proxy donde, en este caso, tenemos que modificar los datos (mediante regexp) que enviamos a través de ellos.

En la mayoría de los casos funciona bien, excepto para los sitios web que usan gzip como codificación de contenido (creo), me he encontrado con un módulo llamadocomprimir e intenté empujar los fragmentos que recibí a través de una secuencia de descompresión / gunzip, pero en realidad no está resultando como esperaba. (ver abajo para el código)

pensé que publicaría algún código para admitir mi problema, este es el proxy que se carga con mvc (express):

module.exports = {
index: function(request, response){
    var iframe_url = "www.nu.nl"; // site with gzip encoding    

    var http = require('http');     
    var httpClient = http.createClient(80, iframe_url);
    var headers = request.headers;
    headers.host = iframe_url;

    var remoteRequest = httpClient.request(request.method, request.url, headers);

    request.on('data', function(chunk) {
        remoteRequest.write(chunk);
    });

    request.on('end', function() {
        remoteRequest.end();
    });

    remoteRequest.on('response', function (remoteResponse){         
        var body_regexp = new RegExp("<head>"); // regex to find first head tag
        var href_regexp = new RegExp('\<a href="(.*)"', 'g'); // regex to find hrefs

        response.writeHead(remoteResponse.statusCode, remoteResponse.headers);

        remoteResponse.on('data', function (chunk) {
    var body = doDecompress(new compress.GunzipStream(), chunk);
            body = body.replace(body_regexp, "<head><base href=\"http://"+ iframe_url +"/\">");
            body = body.replace(href_regexp, '<a href="#" onclick="javascript:return false;"');             

            response.write(body, 'binary');
        });

        remoteResponse.on('end', function() {

            response.end();
            });
        });
    }
};

en la parte del cuerpo var, quiero leer el cuerpo y, por ejemplo, en este caso, eliminar todos los hrefs reemplazándolos con un #. El problema aquí, por supuesto, es que cuando tenemos un sitio que está codificado / comprimido con gzip, todo es un truco y no podemos aplicar las expresiones regulares.

ahora ya me cansé de perder el tiempo con el módulo de compresión de nodos:

 doDecompress(new compress.GunzipStream(), chunk);

que se refiere a

function doDecompress(decompressor, input) {
  var d1 = input.substr(0, 25);
  var d2 = input.substr(25);

  sys.puts('Making decompression requests...');
  var output = '';
  decompressor.setInputEncoding('binary');
  decompressor.setEncoding('utf8');
  decompressor.addListener('data', function(data) {
    output += data;
  }).addListener('error', function(err) {
    throw err;
  }).addListener('end', function() {
    sys.puts('Decompressed length: ' + output.length);
    sys.puts('Raw data: ' + output);
  });
  decompressor.write(d1);
  decompressor.write(d2);
  decompressor.close();
  sys.puts('Requests done.');
}

Pero falla en él ya que la entrada del fragmento es un objeto, así que intenté suministrarlo como un fragmento.toString () que también falla con datos de entrada no válidos.

Me preguntaba si estoy yendo en la dirección correcta.

Respuestas a la pregunta(1)

Su respuesta a la pregunta