{"id":184,"date":"2013-11-04T18:59:37","date_gmt":"2013-11-04T18:59:37","guid":{"rendered":"https:\/\/blogs.ua.es\/jpm33\/?p=184"},"modified":"2013-11-09T17:06:59","modified_gmt":"2013-11-09T17:06:59","slug":"usando-curl-para-depurar-mensajes-http","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jpm33\/2013\/11\/04\/usando-curl-para-depurar-mensajes-http\/","title":{"rendered":"Usando CURL para depurar mensajes HTTP"},"content":{"rendered":"<h1>Introducci\u00f3n<\/h1>\n<p>Todo desarrollador WEB que se precie sabe que debe conocer (sino dominar) el protocolo de comunicaci\u00f3n HTTP. Sobre este protocolo se basan todas las comunicaciones en la WEB (esto no es cierto del todo ;_)).<\/p>\n<p>En proyectos anteriores he tenido que realizar var\u00edas consultas y env\u00edo de datos a trav\u00e9s del API de Google usando productos como Contacts, Calendar, etc.<\/p>\n<p>Ahora no voy a explicar c\u00f3mo funciona el protocolo OAtuh [1], pero si dir\u00e9 que es el mecanismo que usa Google para permitir el acceso a sus APIs de forma segura.<\/p>\n<p>Trabajar con este protocolo y manejar mensajes entre mi aplicaci\u00f3n y los distintos servidores de Google ha requerido una depuraci\u00f3n muy estricta a nivel HTTP y la mejor herramienta que he podido usar es CURL.<\/p>\n<h1>La m\u00e1gia de CURL<\/h1>\n<p>Curl [2], es una herramienta muy conocida entre los administradores de sistemas y muy extendida entre los programadores de PHP.<\/p>\n<p>No quiero perderme en detalles, pero vamos ver un ejemplo donde se realiza una petici\u00f3n a un script PHP que contiene el c\u00f3digo:<\/p>\n<p>Este c\u00f3digo realiza una redirecci\u00f3n a <a title=\"http:\/\/www.google.com\" href=\"http:\/\/www.google.com\">http:\/\/www.google.com<\/a>, pero la pregunta es: Entre mi navegador Web y el servidor, \u00bfqu\u00e9 mensajes HTTP se transmiten? Si utilizamos la opci\u00f3n -v (verbose) podemos ver los mensajes de informaci\u00f3n del programa (precedidos por *), los mensajes que se env\u00edan al servidor (&gt;) y los mensajes que se reciben del servidor (&lt;).<\/p>\n<pre>$ <strong>curl -v http:\/\/webserver\/header_location.php<\/strong>\r\n* About to connect() to webserver port 80 (#0)\r\n* Trying 172.x.y.z... connected\r\n* Connected to webserver (172.x.y.z) port 80 (#0)\r\n&gt; <strong>GET \/header_location.php HTTP\/1.1<\/strong>\r\n&gt; 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\r\n&gt; Host: webserver\r\n&gt; Accept: *\/*\r\n&gt;\r\n&lt; <strong>HTTP\/1.1 302 Found<\/strong>\r\n&lt; Date: Mon, 04 Nov 2013 17:07:30 GMT\r\n&lt; 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\r\n&lt; X-Powered-By: PHP\/5.2.4-2ubuntu5.27\r\n&lt; Location: http:\/\/www.google.com\/\r\n&lt; Content-Length: 0\r\n&lt; Content-Type: text\/html\r\n&lt;\r\n* Connection #0 to host webserver left intact\r\n* Closing connection #0<\/pre>\n<p>Bueno, ahora sabemos que este script\/p\u00e1gina nos env\u00eda a google, pero &#8230; \u00bfse puede automatizar el proceso para ver todos los mensajes HTTP hasta que se sirve la p\u00e1gina WEB? S\u00ed, usando la opci\u00f3n -L.<\/p>\n<p>Usando un comando c\u00f3mo:<\/p>\n<pre>$ <strong>curl -v -L http:\/\/webserver\/header_location.php<\/strong><\/pre>\n<h1>Referencias<\/h1>\n<ol>\n<li>Oauth: <a href=\"http:\/\/es.wikipedia.org\/wiki\/OAuth\" target=\"_blank\">http:\/\/es.wikipedia.org\/wiki\/OAuth<\/a><\/li>\n<li>CURL Homepage: <a href=\"http:\/\/curl.haxx.se\/\" target=\"_blank\">http:\/\/curl.haxx.se\/<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Todo desarrollador WEB que se precie sabe que debe conocer (sino dominar) el protocolo de comunicaci\u00f3n HTTP. Sobre este protocolo se basan todas las comunicaciones en la WEB (esto no es cierto del todo ;_)). En proyectos anteriores he &hellip; <a href=\"https:\/\/blogs.ua.es\/jpm33\/2013\/11\/04\/usando-curl-para-depurar-mensajes-http\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3080,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,374],"tags":[481,154,236729,236718],"class_list":["post-184","post","type-post","status-publish","format-standard","hentry","category-linux","category-programacion","tag-debian","tag-ingenieria","tag-linux","tag-programacion-2"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/users\/3080"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":2,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":186,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/posts\/184\/revisions\/186"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jpm33\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}