Junio de 2007
Introducción: ¿Por qué usar un proxy?
Un servidor proxy es una computadora (o un servicio en una computadora) que realiza solicitudes en nombre de varias computadoras cliente, generalmente a recursos externos. En este artículo, se abordan los servidores proxy HTTP, ya que HTTP es el protocolo que se usa para acceder a las APIs públicas de los servicios web de Google. Por extensión, los proxies HTTPS o SSL también son de interés cuando se realizan solicitudes HTTP que contienen información sensible, como datos privados del usuario o contraseñas. Actualmente, muchas empresas grandes usan proxies HTTP para controlar qué sitios web o información pueden ver los empleados en Internet. También se sabe que las bibliotecas públicas y las escuelas implementan proxies para este propósito. También hay varios servidores proxy disponibles públicamente que se pueden usar para acceder de forma anónima al contenido web.
Los posibles problemas que se pueden enfrentar al usar un servidor proxy dependen del software que se use y de cómo esté configurado. Un proxy se considera "transparente" si no altera la solicitud del cliente ni la respuesta del servidor de ninguna manera que no sea necesaria para la identificación y autenticación del proxy. Sin embargo, una gran cantidad de servidores proxy alteran la solicitud o la respuesta de formas que un desarrollador debe conocer. En particular, ciertos proxies alterarán el tipo de contenido de la respuesta o quitarán los encabezados HTTP keep-alive que se envían al servidor externo que aloja el recurso.
Entonces, ¿por qué un desarrollador querría usar un proxy HTTP o SSL? Por lo general, hay dos razones para esto: es un requisito de alguna infraestructura corporativa o el desarrollador desea depurar una aplicación que usa un servicio web. El primer motivo es completamente inevitable si las reglas de la red en la que trabaja el desarrollador prohíben las conexiones web o SSL no proxied a sitios web externos. Esta última razón es la que informan con frecuencia en nuestros foros de asistencia los desarrolladores que intentan solucionar problemas cuando trabajan con un servicio web de Google. Existen proxies de "depuración" especiales, como Fiddler y Charles, que están diseñados para esta situación específica. Para obtener más información sobre este uso de un servidor proxy, te recomendamos que leas nuestro artículo On the Wire: Tools for API Developers.
En algunas aplicaciones, puede ser difícil agregar compatibilidad con servidores proxy. Afortunadamente, la mayoría de las bibliotecas cliente de la API de Google Data se pueden hacer funcionar con un servidor proxy HTTP después de algunas pequeñas modificaciones en el código. Este artículo tiene como objetivo servir como punto de partida para un desarrollador que desee usar un servidor proxy para las solicitudes web que realiza su aplicación.
Java
Usar un proxy HTTP con la biblioteca cliente de Java es fácil gracias al uso de propiedades del sistema por parte de Sun para administrar la configuración de conexión.
Por ejemplo, si tu servidor proxy corporativo se ejecutara en "mi.dominio.proxy.com", en el puerto 3128, podrías agregar lo siguiente a tu código antes de crear un objeto de servicio para Calendario de Google, Hojas de cálculo de Google, etcétera.
System.setProperty("http.proxyHost", "my.proxy.domain.com"); System.setProperty("http.proxyPort", "3128");
Como alternativa, puedes hacerlo en la línea de comandos cuando inicies tu entorno de servlet:
java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128
Con las versiones más recientes del paquete JSSE, esto también se puede extender a los proxies SSL. Si el mismo servidor proxy del ejemplo anterior ejecutara un proxy SSL en el puerto 3129, el código necesario sería el siguiente:
System.setProperty("https.proxyHost", "my.proxy.domain.com"); System.setProperty("https.proxyPort", "3129");
Esto también se puede hacer desde la línea de comandos de la misma manera que con el proxy HTTP.
A veces, es posible que debas proporcionar credenciales a un servidor proxy para usarlo. Por lo general, se envían con un hash base64 incluido en un encabezado HTTP, de la siguiente manera:
String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes())); String base64encodedCredentials = "Basic " + encoded; myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);
Ten en cuenta que el código anterior usa el paquete Apache Commons Codec para realizar la codificación Base64 necesaria. Deberás importar la clase org.apache.commons.codec.binary.Base64
para ejecutar el código anterior.
.NET
Usar un proxy HTTP con la biblioteca cliente de .NET no es tan trivial como con el cliente de Java, pero se puede lograr de manera similar cuando se crea el objeto de servicio para un producto en particular.
Por ejemplo, es posible que queramos usar un proxy para interactuar con el servicio de Calendario de Google:
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;
Esto debería detectar el proxy necesario de la configuración de conexión a Internet, una buena función de la biblioteca de .NET. Sin embargo, si no confías en que detecte el proxy correctamente, también puedes configurarlo cambiando el código a lo siguiente:
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;
Conclusión
En este artículo, se explicó cómo hacer que algunas de las bibliotecas cliente de las APIs de datos de Google funcionen con un servidor proxy HTTP. Los desarrolladores que trabajan detrás de un servidor proxy obligatorio según la política de red aún pueden usar estas bibliotecas. Los desarrolladores también pueden usar un servidor proxy para depurar su código, ya que este registra el contenido de las solicitudes y respuestas HTTP que se envían a un servicio web de Google y desde él. Existen casos de uso más avanzados de un servidor proxy y otras bibliotecas cliente que no se abordan en este instructivo. Se recomienda a los desarrolladores que necesiten ayuda adicional que participen en nuestros grupos de asistencia al cliente públicos que se vinculan a continuación.
Para obtener más información sobre las bibliotecas cliente que se usan en este artículo, visita las siguientes páginas:
Otros recursos:
- Grupo de asistencia de las APIs de datos de Google
- Página wiki de introducción a Objective-C: Analiza brevemente la captura de errores de un servidor proxy y la autenticación con un diálogo del usuario.