Introducción
Todo desarrollador WEB que se precie sabe que debe conocer (sino dominar) el protocolo de comunicación HTTP. Sobre este protocolo se basan todas las comunicaciones en la WEB (esto no es cierto del todo ;_)).
En proyectos anteriores he tenido que realizar varías consultas y envío de datos a través del API de Google usando productos como Contacts, Calendar, etc.
Ahora no voy a explicar cómo funciona el protocolo OAtuh [1], pero si diré que es el mecanismo que usa Google para permitir el acceso a sus APIs de forma segura.
Trabajar con este protocolo y manejar mensajes entre mi aplicación y los distintos servidores de Google ha requerido una depuración muy estricta a nivel HTTP y la mejor herramienta que he podido usar es CURL.
La mágia de CURL
Curl [2], es una herramienta muy conocida entre los administradores de sistemas y muy extendida entre los programadores de PHP.
No quiero perderme en detalles, pero vamos ver un ejemplo donde se realiza una petición a un script PHP que contiene el código:
Este código realiza una redirección a http://www.google.com, pero la pregunta es: Entre mi navegador Web y el servidor, ¿qué mensajes HTTP se transmiten? Si utilizamos la opción -v (verbose) podemos ver los mensajes de información del programa (precedidos por *), los mensajes que se envían al servidor (>) y los mensajes que se reciben del servidor (<).
$ curl -v http://webserver/header_location.php * About to connect() to webserver port 80 (#0) * Trying 172.x.y.z... connected * Connected to webserver (172.x.y.z) port 80 (#0) > GET /header_location.php HTTP/1.1 > User-Agent: curl/7.18.0 (i486-pc-linux-gnu) libcurl/7.18.0 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.1 > Host: webserver > Accept: */* > < HTTP/1.1 302 Found < Date: Mon, 04 Nov 2013 17:07:30 GMT < Server: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 PHP/5.2.4-2ubuntu5.27 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g < X-Powered-By: PHP/5.2.4-2ubuntu5.27 < Location: http://www.google.com/ < Content-Length: 0 < Content-Type: text/html < * Connection #0 to host webserver left intact * Closing connection #0
Bueno, ahora sabemos que este script/página nos envía a google, pero … ¿se puede automatizar el proceso para ver todos los mensajes HTTP hasta que se sirve la página WEB? Sí, usando la opción -L.
Usando un comando cómo:
$ curl -v -L http://webserver/header_location.php
Referencias
- Oauth: http://es.wikipedia.org/wiki/OAuth
- CURL Homepage: http://curl.haxx.se/
Juan Antonio Gil Martínez-Abarca liked this on Facebook.
Muchas gracias Juan Antonio. No es una entrada magistral, espero más adelante poder poner un post ampliándolo donde ver un ejemplo más complejo, con cookies, modificar cabeceras, etc … ;_)
Es una herramienta muy interesante que se debería dominar al salir de la uni.