Google+ Seguidores

viernes, 24 de noviembre de 2017

Creación de un Cliente de Protocolo HTTP y HTTPS.

Introducción:

Hace ya un tiempo, escribí un artículos en donde explicaba el desarrollo de un pequeño servidor HTTP con Python y el modulo "http.server". Si quieres echarle un vistazo ingresa al siguiente enlace: Servidores HTTP con Python.

En el día de hoy, en vez de crear un servidor, haremos un cliente que envié peticiones a servidores HTTP. 

Resultado de imagen para python http

Recordemos que siempre que entramos a nuestro navegador y escribimos la URL de una pagina web, al momento de hacer click en enter, estas enviando una petición al servidor de la URL especificada, luego de esto obtenemos una respuesta (Un documento HTML). 

Podemos pensar en este proceso como una conversación, el cliente habla y el servidor responde. Debemos tener muy en claro que se necesitan uno al otro para que la comunicación funcione.

En el articulo Servidores HTTP con Python explico lo que es el protocolo HTTP, te recomiendo echarle un vistazo.

http.client - Cliente de Protocolo HTTP.

Comencemos por el principio, hagamos algo sencillo, enviaremos una petición a los servidores de "pythondiairo.com" para obtener sus cabeceras. Veamos un ejemplo:


import http.client
conn = http.client.HTTPConnection("www.pythondiario.com")
conn.request("HEAD", "/")
response = conn.getresponse()
print(response.getheaders())

Antes de ejecutar el código, vamos a examinarlo primero.
Lo primero que hacemos es importar el modulo "http.client", luego creamos una instancia de la clase "HTTPConnection" y le pasamos como argumento la URL del servidor con el cual queremos interactuar. 
Luego usamos el método "request" de la instancia de "HTTPConnection", el método requests lo que hace es enviar una petición al servidor, el primer argumento que le pasamos al método "request" es el "método de petición".
Recordemos que existen varios método de petición, en este caso estoy haciendo uso del método "HEAD", el cual nos da un respuesta igual a la de "GET", pero sin recibir el cuerpo, y como lo único que haré sera pedir los metadatos de los encabezados, es la mejor opción.

Luego de todo esto, obtenemos la respuesta del servidor con el método "getresponse" y lo guardamos en una variable llamada "response".

Por ultimo, le pedimos al servidor los encabezados de respuesta, y los mostramos con el método print.

Ahora sí, ejecutemos el código:




De esta manera tan fácil, obtenemos los meta datos de los encabezados de la respuesta.

Ahora, usemos el método "GET" para obtener el cuerpo de la pagina. El procedimiento seria el mismo, veamos un ejemplo:


import http.client
conn = http.client.HTTPConnection("www.pythondiario.com")
conn.request("GET", "/")
response = conn.getresponse()
print(response.read(1000))

Como pueden observar, el procedimiento es el mismo, simplemente en vez de utilizar el método de petición "HEAD" usamos el método "GET", y en vez de pedir los encabezados de la respuesta, utilizamos el método "read" para leer el cuerpo de la pagina HTML.



A continuación te mostrare otros mettodos de la clase "HTTPResponse" que nos serviran mucho:

>>> response.status #Nos devuelve el código de estatus de la respuesta
200
>>> response.verson #Nos devuelve la version usado por el servidor (10 para HTTP/1.0 y 11 para HTTP/1.1)
11
>>> response.reason #Frase del motivo devuelta por el servidor
'OK'
>>> response.getheader("Server") #getheaders nos devuelve el valor del encabezado especificado en su primer argumento
'GSE'


Bueno, un articulo un poco corto, pero nos ayuda a entender mejor como trabajar con HTTP, un protocolo que todo informactico debe de conocer.

Quieres más de "http.client", échale un vistazo a la documentacion ingresando al siguiente enlace: https://docs.python.org/3/library/http.client.html.

Si tienes alguna duda, comparte con nossotros en los comentarios y te ayudaremos.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D

1 comentario :
Write comentarios

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

Powered by Blogger .