Advertisement
Guest User

Proxy Serv gzip compression.

a guest
Jan 5th, 2011
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var events = require('events');
  2. var sys = require("sys");
  3. var fs = require("fs");
  4. var compress = require(".././compress");
  5.  
  6. function doDecompress(decompressor, input, proxysponse) {
  7.     var d1 = input.substr(0, 25);
  8.     var d2 = input.substr(25);
  9.  
  10.     sys.puts('Making decompression requests...');
  11.    
  12.     var output = '';
  13.    
  14.     decompressor.setInputEncoding('binary');
  15.     decompressor.setEncoding('utf8');
  16.     decompressor.addListener('data', function(data) {
  17.         output += data;
  18.     }).addListener('error', function(err) {
  19.         throw err;
  20.     }).addListener('end', function() {
  21.         sys.puts('Decompressed length: ' + output.length);
  22.         sys.puts('output: ' +output);
  23.        
  24.         var body_regexp = new RegExp("<head>");            
  25.         output = output.replace(body_regexp, "<head><base href=\"http://www.mashedpotatoes.nl/\">");
  26.  
  27.         proxysponse.end(output);
  28.         //proxysponse.end();
  29.     });
  30.    
  31.     decompressor.write(d1);
  32.     decompressor.write(d2);
  33.     decompressor.close();
  34.     sys.puts('Requests done.');
  35. }
  36.  
  37. module.exports = {
  38.     index: function(request, response){
  39.         var iframe_url = "www.mashedpotatoes.nl";      
  40.        
  41.         var http = require('http');    
  42.         var httpClient = http.createClient(80, iframe_url);
  43.         var headers = request.headers;
  44.         headers.host = iframe_url;
  45.  
  46.     console.log('request url: ' + request.url);
  47.  
  48.         var rurl_regexp = new RegExp("draft");
  49.         var rurl = request.url.replace(rurl_regexp, "");
  50.     console.log('request url after: ' + rurl);
  51.  
  52.         var remoteRequest = httpClient.request(request.method, rurl, headers);
  53.  
  54.         request.on('data', function(chunk) {
  55.             remoteRequest.write(chunk);
  56.         });
  57.  
  58.         request.on('end', function() {
  59.             remoteRequest.end();
  60.         });
  61.  
  62.     var remoteBody = '';
  63.  
  64.         remoteRequest.on('response', function (remoteResponse){        
  65.  
  66.             var href_regexp = new RegExp('\<a href="(.*)"', 'g');
  67.            
  68.             var script_regexp = new RegExp('<script(.|[\n\r])*</script>', 'g');
  69.             var object_regexp = new RegExp('<object(.|[\n\r])*</object>', 'g');
  70.            
  71.         remoteResponse.headers['content-encoding'] = "text/html";
  72.             response.writeHead(remoteResponse.statusCode, remoteResponse.headers);
  73.                    
  74.             remoteResponse.on('data', function (chunk) {
  75.         remoteBody = remoteBody + chunk.toString('binary');
  76.         console.log('Receiving  chunk...');
  77.             });
  78.            
  79.             remoteResponse.on('end', function() {
  80.         console.log('Started decompression after receiving everything..');             
  81.         doDecompress(new compress.GunzipStream(), remoteBody, response);
  82.                 response.end();
  83.             });
  84.         });
  85.     }
  86. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement