Living Vicariously: usar servidores proxy com as bibliotecas de cliente da API Google Data

Jeff Fisher, equipe de APIs de dados do Google
junho de 2007

Introdução: por que usar proxy?

Um servidor proxy é um computador (ou serviço em um computador) que faz solicitações de vários computadores cliente em nome deles, normalmente para recursos externos. Este artigo é relacionado a servidores proxy HTTP, já que o protocolo HTTP é usado para acessar as APIs públicas dos serviços da Web do Google. Por extensão, os proxies HTTPS ou SSL também são interessantes para fazer solicitações HTTP com informações confidenciais, como dados particulares do usuário ou senhas. Atualmente, muitas grandes empresas usam proxies HTTP para controlar quais sites ou informações os funcionários podem ver na Internet. As bibliotecas e escolas públicas também são conhecidas por implementar proxies para essa finalidade. Há também vários servidores proxy disponíveis publicamente que podem ser usados para acessar anonimamente o conteúdo da Web.

Os possíveis problemas ao usar um servidor proxy dependem de qual software está sendo usado e de como ele está configurado. Um proxy será considerado "transparente" se não alterar a solicitação do cliente ou a resposta do servidor de forma diferente da necessária para a identificação e autenticação do proxy. No entanto, um grande número de servidores proxy muda a solicitação ou a resposta de maneiras que um desenvolvedor precisa conhecer. Especificamente, determinados proxies alterarão o tipo de conteúdo da resposta ou impedirão que cabeçalhos de sinal de atividade HTTP sejam enviados ao servidor externo que hospeda o recurso.

Por que um desenvolvedor usaria um proxy HTTP ou SSL? Geralmente, existem dois motivos para isso: ele é exigido por alguma infraestrutura corporativa ou o desenvolvedor quer depurar um aplicativo que usa um serviço da Web. O primeiro motivo é inevitável se as regras da rede em que o desenvolvedor está trabalhando proibirem conexões da Web ou SSL sem proxy com sites externos. Esse último motivo é relatado com frequência nos nossos fóruns de suporte por desenvolvedores que tentam resolver problemas ao lidar com um serviço da Web do Google. Existem proxies de "depuração" de uso especial, como NGINX e Charles, voltados para essa situação exata. Para mais informações sobre o uso de um servidor proxy, leia nosso artigo Em trânsito: ferramentas para desenvolvedores de APIs.

Em alguns aplicativos, adicionar o suporte ao servidor proxy pode ser difícil. Felizmente, após a realização de pequenas modificações no código, a maioria das bibliotecas de cliente da API Google Data pode funcionar com um servidor proxy HTTP. Este artigo tem como objetivo servir como ponto de partida para um desenvolvedor que queira usar um servidor proxy para as solicitações da Web feitas pelo aplicativo.

Java

O uso de um proxy HTTP com a biblioteca de cliente Java é fácil graças ao uso das propriedades do sistema pelo Sun para gerenciar as configurações de conexão.

Por exemplo, se o servidor proxy corporativo estivesse em execução em "my.proxy.domain.com", na porta 3128, você poderia adicionar o seguinte ao código antes de criar um objeto de serviço para o Google Agenda, as Planilhas do Google etc.

System.setProperty("http.proxyHost", "my.proxy.domain.com");
System.setProperty("http.proxyPort", "3128");

Como alternativa, isso pode ser feito na linha de comando ao iniciar o ambiente de servlet:

java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128

Com versões mais recentes do pacote JSSE, isso também pode ser estendido para proxies SSL. Se o mesmo servidor proxy no exemplo anterior estivesse executando um proxy SSL na porta 3129, o código necessário seria:

System.setProperty("https.proxyHost", "my.proxy.domain.com");
System.setProperty("https.proxyPort", "3129");

Isso também pode ser feito na linha de comando da mesma forma que com o proxy HTTP.

Às vezes, pode ser necessário fornecer credenciais a um servidor proxy para usá-lo. Normalmente, elas são enviadas usando um hash de base64 incluído em um cabeçalho HTTP, da seguinte maneira:

String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes()));
String base64encodedCredentials = "Basic " + encoded;
myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);

O código acima usa o pacote Apache Commons Codec para fazer a codificação Base64 necessária. Você precisa importar a classe org.apache.commons.codec.binary.Base64 para executar o código acima.

.NET

O uso de um proxy HTTP com a biblioteca cliente .NET não é tão trivial quanto com o cliente Java, mas pode ser realizado de maneira semelhante ao criar o objeto de serviço para um determinado produto.

Por exemplo, podemos usar um proxy para interagir com o serviço do Google Agenda:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
query.Uri = new Uri(calendarURI);
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
IWebProxy iProxy = WebRequest.DefaultWebProxy;
WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri));
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

Isso detecta o proxy necessário nas configurações de conexão com a Internet, um ótimo recurso da biblioteca .NET. No entanto, se você não confia nele para descobrir o proxy corretamente, também pode configurá-lo mudando o código para:

using System.Net;

CalendarService service = new CalendarService("CalendarSampleApp");
GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory;
WebProxy myProxy = new WebProxy("http://my.proxy.example.com:3128/",true);
// potentially, setup credentials on the proxy here
myProxy.Credentials = CredentialCache.DefaultCredentials;
myProxy.UseDefaultCredentials = true;
requestFactory.Proxy = myProxy;

Conclusão

Neste artigo, falamos sobre como fazer com que algumas das bibliotecas de cliente da API Google Data funcionem com um servidor proxy HTTP. Os desenvolvedores que trabalham em um servidor proxy autorizado pela política de rede ainda podem usar essas bibliotecas. Os desenvolvedores também podem empregar um servidor proxy para ajudar a depurar código, fazendo com que esse servidor registre o conteúdo de solicitações HTTP e respostas enviadas e recebidas por um serviço da Web do Google. Há casos de uso mais avançados de um servidor proxy e outras bibliotecas de cliente não abordadas por este tutorial. Incentivamos os desenvolvedores que precisam de ajuda adicional a participar dos nossos grupos de suporte públicos nos links abaixo.

Para mais informações sobre as bibliotecas de cliente usadas neste artigo, acesse as seguintes páginas:

Outros recursos: