узел -v возвращает v0.2.5, я также имел в виду, что буквально половина сайта отображается в браузере. *

тоящее время я работаю на прокси-сервере, где мы в этом случае должны изменить данные (используя regexp), которые мы проталкиваем через них.

В большинстве случаев он работает нормально, за исключением сайтов, которые используют gzip для кодирования контента (я думаю), я наткнулся на модуль под названиемкомпресс и пытался протолкнуть куски, которые я получаю, через поток распаковки / распаковки, но на самом деле все оказалось не так, как я ожидал. (см. код ниже)

Я решил опубликовать некоторый код для поддержки моего исследования, это прокси, который загружается с помощью 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();
            });
        });
    }
};

в части тела var я хочу прочитать тело и, например, в этом случае удалить все hrefs, заменив их символом #. Проблема здесь, конечно, в том, что когда у нас есть сайт, который закодирован / сжат gzip, это все неряшливо, и мы не можем применить регулярные выражения.

теперь я уже устал возиться с модулем сжатия узла:

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

что относится к

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.');
}

Но это терпит неудачу на этом, так как ввод чанка - объект, таким образом, я попытался предоставить это как chunk.toString (), который также терпит неудачу с недопустимыми входными данными.

Мне было интересно, если я вообще иду в правильном направлении?

Ответы на вопрос(1)

Ваш ответ на вопрос