Java Networking e a Classe Proxy

Com o J2SE 5.0 foi lançada uma grande inovação no que toca a trabalhar com Proxys para realizar conexões.

Antes apenas era possível trabalhar com Proxys recorrendo às propriedades do sistema, este mecanismo funciona mas é muito pouco flexível, com o Java 5 o trabalho é muito facilitado embora exista muito pouca documentação sobre está nova API.

Classe Proxy

Esta classe representa a definição de proxy, um tipo normalmente HTTP ou Socks e um endereço.
Esta API dispõe três tipos de proxy

  • DIRECT – Representa a ligação directa ou seja sem proxy.
  • HTTP – Representa uma proxy sob o protocolo HTTP.
  • SOCKS – Representa uma proxy que utiliza quer SOCKS v4 ou v5,

Seguindo os tipos disponíveis para criar um objecto Proxy HTTP basta o seguinte código

Proxy proxy = new Proxy( Proxy.Type.HTTP, new InetSocketAddress("proxyserver.com", 8080) );

O código acima cria um objecto Proxy do tipo HTTP para o servidor proxyserver.com pela porta 8080.
Já temos a nossa Proxy agora vamos ver como utilizar esta proxy. Para isso vamos utilizar o método openConnection() da classe URL, passando o nosso objecto proxy como argumento.

Proxy proxy = new Proxy( Proxy.Type.HTTP, new InetSocketAddress("proxyserver.com", 8080) );

URL url = new URL("https://wmagician.wordpress.com");

URLConnection conn = (URLConnection) url.openConnection(proxy);

Como podemos ver é muito simples basta abrir a conexão dando a proxy como argumento, com isto a ligação feita a https://wmagician.wordpress.com é feita através do servidor proxyserver.com. Ao invés da classe URLConnection podíamos também utilizar a classe HttpURLConnection que é subclasse da referida.

Podemos também forçar a que uma URLConnection utilize proxys do tipo SOCKS para isso basta mudar o tipo. Vamos usar como exemplo uma ligação a um servidor FTP por URLConnection.

Proxy proxy = new Proxy( Proxy.Type.SOCKS, new InetSocketAddress("socks.proxyserver.com", 1080) );

URL url = new URL("ftp://ftp.servidor.pt/magician.gif");

URLConnection conn = (URLConnection) url.openConnection(proxy);

O exemplo acima uma conexão FTP que vai ser forçada a passar por uma proxy SOCKS.

Para além de Conneções atravez das classes URLConnection e HttpURLConnection podemos ainda fazer ligações por proxys utilizando sockets TCP.
A primeira parte de processo é bastante semelhante aos anteriores, criamos um objecto Proxy com o tipo de proxy, endereço e porta. O passo seguinte é criar um objecto Socket em que passamos como argumento a nossa proxy, para terminar executamos o método connect onde damos o destino final da nosso ligação.

Proxy proxy = new Proxy( Proxy.Type.SOCKS, new InetSocketAddress("socks.proxyserver.com", 1080) );

Socket socket = new Socket( proxy );

socket.connect( new InetSocketAddress("server.magic.com", 9000) );

Muito simples como podemos ver o exemplo faz uma ligação por socket ao servidor server.magic.com na porta 9000, passando pela proxy socks.proxyserver.com na porta 1080.

Aqui fica uma pequena explicação desta classe muito útil e simples mas muito pouco documentada, num proximo artigo irei falar sobre ProxySelecter mais um mecanismo muito útil para trabalhar com Proxys.

Por Fábio Correia (White Magician)

Anúncios

2 thoughts on “Java Networking e a Classe Proxy

  1. Não testei esta solução mas segundo pude apurar é possível fazer da seguinte forma:


    Proxy proxy = new Proxy( Proxy.Type.HTTP, new InetSocketAddress("proxyserver.com", 8080) );

    URL url = new URL("https://wmagician.wordpress.com");

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy);

    sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();

    String auth = encoder.encode("mydomain\\MYUSER:MYPASSWORD".getBytes());

    conn.setRequestProperty("Proxy-Authorization", "Basic " + auth);

    Se for possível depois diz alguma coisa infelizmente por falta de tempo não tenho hipótese de fazer eu mesmo o teste :\

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google photo

Está a comentar usando a sua conta Google Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s