Detección automática de un Web Proxy

martes, 10 de abril de 2007

Muchas veces hemos visto en programas de escritorio que se conectan a Internet, la opción “utilizar la configuración de Internet Explorer”, esto por lo general se utiliza para tomar de éste la configuración de un web Proxy.

Cuando se configura un proxy en Internet Explorer, esto se almacena en el registro de Windows, y podemos acceder a esta información desde .NET a través de la clase WebRequest.



Ejemplo

A modo de ejemplo puntual voy a mostrar un “caso de estudio” con el que nos encontramos recientemente. Este fragmento de una aplicación debe descargar desde nuestro blog los últimos artículos publicados e insertarlos en un DataSet para luego mostrarlos apropiadamente.

Para esto se descarga un listado RSS (un archivo xml con el resumen de los artículos del blog) de la web (via http), que luego es parseado y recorrido para construir el DataSet deseado.

Para esto creamos un HttpWebRequest cuya respuesta es utilizada para construir un XmlDocument, luego los nodos de este xml son recorridos con un simple foreach.



Problema

El problema surge al resultar imposible acceder directamente al servidor de nuestro blog desde la máquina donde corre esta aplicación, necesitamos utilizar el Proxy local. No resulta viable fijar este dato en nuestro app.config obligando a mantener este dato actualizado en cada instalación.





Solución





La línea interesante aquí es:


A partir del Framework 2.0 de .NET en el namespace System.Net la clase WebRequest incorpora el método estático GetSystemWebProxy() que devuelve el Proxy configurado en Internet Explorer para el usuario impersonado. Y podemos así asignar programáticamente este Proxy al Request creado.

Un punto importante a destacar es que esta configuración es dinámica, puede por ejemplo pasar por alto el Proxy si la URI indicada pertenece a un servidor local (si así se indica en la configuración de Proxy en Internet Explorer).

Si la detección automática del Proxy falla, se utiliza el Proxy estático (si se estableció uno). Finalmente si todo esto falla, se intenta la conexión directa.

Conclusión

esta práctica nos permite olvidarnos de la detección o configuración de Proxys en nuestro código, y simplificar la molestia tarea de configuración y diagnostico de problemas en la conexión a Internet.



Más información

Sobre la detección automática de Proxys: