Início > Programação > HTTP Proxy

HTTP Proxy

Precisava acessar um recurso REST à partir do meu próprio web service para enviar um JSON com os dados de autenticação do usuário e ler um outro JSON que conteria os dados do usuário ou uma mensagem de erro. O proxy corporativo estava negando o acesso à URL daquele recurso.

A solução era mais simples do que pensei – para não dizer óbvia. Utilizei a classe Proxy em colaboração com a classe InetSocketAddress para fazer as configurações de proxy necessárias para que o objeto URL conseguisse abrir uma conexão com o destino:

      String enderecoProxy = "proxy.corporativo.com.br";
      Integer portaProxy = 3510;
      Proxy proxy = new Proxy(Proxy.Type.HTTP, 
         new InetSocketAddress(enderecoProxy, portaProxy));
      URL u = new URL("https://site.com.br/endpoint/autenticar");
      HttpsURLConnection connect = (HttpsURLConnection) u.openConnection(proxy);

Segue abaixo o exemplo completo que demonstra o problema e a solução:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;

import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import javax.net.ssl.HttpsURLConnection;
import javax.servlet.http.HttpServletRequest;

@Path("/endpoint")
public class AutenticarResource {
   @GET
   @Path("/autenticar")
   @Produces(MediaType.APPLICATION_JSON)
   public void autenticar() throws IOException {
      HttpsURLConnection connect = configurarConexao();
      autenticar(connect);
      JsonObject json = extrairResposta(connect);
      logarDadosResposta(json);
   }
   
   private HttpsURLConnection configurarConexao() 
         throws MalformedURLException, IOException, ProtocolException {
      // Configura o proxy
      String enderecoProxy = "proxy.corporativo.com.br";
      Integer portaProxy = 3510;
      Proxy proxy = new Proxy(Proxy.Type.HTTP, 
         new InetSocketAddress(enderecoProxy, portaProxy));

      // Abre a conexao passando o proxy configurado
      URL u = new URL("https://site.com.br/endpoint/autenticar");
      HttpsURLConnection connect = (HttpsURLConnection) u.openConnection(proxy);
      connect.setDoOutput(true);
      connect.setRequestProperty("Content-Type", "application/json");
      connect.setRequestProperty("Accept-Charset", "utf-8");
      connect.setRequestMethod("POST");
      return connect;
   }

   private void autenticar(HttpsURLConnection connect) 
         throws UnsupportedEncodingException, IOException {
      JsonObject autenticarJson = 
         Json.createObjectBuilder().add("cpf", "111.111.111-11").build();
      OutputStreamWriter wr = 
         new OutputStreamWriter(connect.getOutputStream(), "utf-8");
      wr.write(autenticarJson.toString());
      wr.flush();
   }

   private JsonObject extrairResposta(HttpsURLConnection connect) 
         throws UnsupportedEncodingException, IOException {
      BufferedReader in = new BufferedReader(
         new InputStreamReader(connect.getInputStream(), "utf-8"));
      String out = in.readLine();
      JsonReader reader = Json.createReader(new StringReader(out));
      JsonObject json = reader.readObject();
      return json;
   }

   private void logarDadosResposta(JsonObject json) {
       JsonObject jsonRP = json.getJsonObject("resposta");
       if (jsonRP.getBoolean("sucesso")) {
          JsonObject usuarioJson = json.getJsonObject("usuario");
          System.out.println(usuarioJson.getString("nome"));
          System.out.println(usuarioJson.getInt("idade"));
       } else {
          System.out.println(jsonRP.getString("mensagemErro"));
       }
   }
}
Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: