Fazendo um servidor proxy em Java

0 respostas
Guga360

Eu estou tentando fazer um SERVIDOR proxy em Java, mas por nenhum motivo mesmo. Quero fazer na verdade um tipo de AdBlock pro IE e pro Chrome e outros browsers que ainda não tem AdBlock.

Eu já fiz o proxy, mas o que acontece é que muitos sites não funcionam.
As imagens ficam todas corrompidas. Acentos não aparecem.
Outros sites nem funcionam, ou demoram vários minutos para carregar.
Há algum jeito de fazer funcionar corretamente?
E como é um proxy rodando na minha própria máquina, quero que fique rápido, há alguma dica pra não ficar lento?

import java.net.*;
import java.io.*;
import java.util.*;
import org.apache.commons.io.*;

public class FibDraw {	
    public static void main(String[] args) throws Exception {
    	ServerSocket s = new ServerSocket(123);
    	
    	while (true) {    		
    		Socket ac = s.accept();
    		System.out.println("Recebendo requerimento browser com proxy...");    		
    		BufferedReader rrad = new BufferedReader(new InputStreamReader(ac.getInputStream()));
    		OutputStreamWriter rsnd = new OutputStreamWriter(ac.getOutputStream());
    		StringBuilder prxreq2 = new StringBuilder();
    		String temp;
    		String host = "";  
    			  		
    		while (!(temp = rrad.readLine()).equals("")) {    			
    			if (temp.indexOf("Accept-Encoding") == -1) prxreq2.append(temp); prxreq2.append("\r\n");
    			if (temp.indexOf("Host:") > -1) host = temp.split(": ")[1]; 			
    		}
    		
        	prxreq2.append("\r\n");
    		String prxreq = new String(prxreq2);
    		System.out.println(prxreq);
    		
    		System.out.println("Re-enviando para o servidor...");
    		Socket cl = new Socket(host,80);
    	
    		OutputStreamWriter d = new OutputStreamWriter(cl.getOutputStream());
    		d.write(prxreq);
    		d.flush();
    		
    		System.out.println("Esperando resposta do servidor...");    	
    		String resp = IOUtils.toString(cl.getInputStream());
    		System.out.println(resp);   
    		
    		d.close();    	 	
    		cl.close();
    		
    		System.out.println("Enviando resposta do servidor para o browser...");
    		
    		rsnd.write(resp);
    		rsnd.flush();
    		
    		rsnd.close();
    		ac.close();    		
    	}    	
    }
}

Eu creio que é alguma coisa haver com o BufferedReader, mas o problema é que se eu faço "!= null" não dá certo. tem que ser linha.equals(""), como vou fazer isso?

E além disso ignorem que a classe se chama FibDraw, porque eu estava fazendo uns testes lá.

Criado 25 de outubro de 2008
Respostas 0
Participantes 1