En mi anterior post comentaba los peligros de usar alegremente los controles UpdatePanel de AJAX y mostraba con la excelente herramienta Fiddler c├│mo eran las peticiones que se enviaban y recib├şan.

Alguien me ha preguntado c├│mo hago para poder utilizar Fiddler con el servidor Web de desarrollo que viene con Visual Studio (conocido comunmente como Cassini), ya que por mucho que actives Fiddler por defecto no captura las peticiones hechas a dicho servidor.

El servidor de desarrollo s├│lo admite peticiones locales y accedemos a ├ęse a trav├ęs de una URL del tipo:

http://locahost:3572/miapp

Eligiendo un puerto aleatorio de cada vez.

Cuando lanzas Fiddler ├ęste se coloca como proxy de Internet Explorer interceptando todas las llamadas que hace ├ęste a las p├íginas Web. Lo que ocurre es que IE cuando detecta que una llamada se va a hacer en local (contra localhost vamos) autom├íticamente hace caso omiso de los posibles proxy que hubiera y lanza la petici├│n directamente, de ah├ş que Fiddler no funcione.

Podemos solucionar este problema de una manera sencilla usando el siguiente truco.

Modificaci├│n al vuelo de la URL en Fiddler

La herramienta Fiddler nos permite responder a diferentes eventos mientras realiza una petici├│n, los cuales podemos interceptar con c├│digo de Script. Se puede ver el ┬┤codigo por defecto de estos eventos usando el men├║ "Rules" de fiddler, as├ş:

Uno de estos eventos se produce justo antes de lanzar la petici├│n desde el proxy y se llama "OnBeforeRequest". Por lo tanto podemos modificar la URL local para que IE piense que es externa, y volver a modificarla en el evento mencionado antes de que el proxy lance la petici├│n. La manera m├ís f├ícil es a├▒adir a la palabra 'localhost' un punto justo al final. As├ş IE no la reconocer├í como la URL local y la petici├│n pasar├í a trav├ęs de Fiddler. En el evento OnBeforeRequest s├│lo tenemos que a├▒adir los siguiente al principio:

        if (oSession.host.substr(0, 10)=="localhost.")
        {
                 oSession.host=oSession.host.replace("localhost.", "127.0.0.1");
        } 

Esto hace que cuando Fiddler detecta una petici├│n a cualquier url que empiece por "localhost." la transforma en una llamada a la misma URL dentro de "127.0.0.1", que es equivalente.

Obviamente podr├şamos usar cualquier otro a├▒adido a la URL local para cambiar la petici├│n. Incluso en lugar de un simple punto a├▒adir un subdominio especial del estilo ".local", para que fueran URLs del estilo "localhost.local" o algo as├ş, cambiando por tanto el peque├▒o c├│digo de intercepci├│n en el evento, pero el punto es el camino m├ís r├ípido y va de maravilla.

As├ş que ya sabes, haz ese retoque en el evento, y a partir de entonces lanza tu aplicaci├│n y justo tras haber lanzado Fiddler a├▒├ídele un punto a localhost al final para que Fiddler entre en acci├│n y puedas analizar con detalle todo el trasiego de informaci├│n entre cliente y servidor que produce tu aplicaci├│n, incluyendo peticiones AJAX encualquier puerto :-)

💪🏻 ┬┐Este post te ha ayudado?, ┬┐has aprendido algo nuevo?
Pues NO te pido que me invites a un caf├ę... Te pido algo m├ís f├ícil y mucho mejor

Escrito por un humano, no por una IA