Google+ Seguidores

jueves, 5 de octubre de 2017

Servidores HTTP - Modulo http.server

Introducción:

Cuando era un poco más pequeño de lo que soy ahora, y no sabia nada de informática, siempre miraba en la parte superior de mi monitor, en el navegador web, y me preguntaba ¿Que demonios significa HTTP?, luego iba a otra pagina web, y ya no era HTTP sino HTTPS.

Luego de un tiempo, empezó a interesarme la informática, y no mucho después conocí a los protocolos de Internet.

Quiero que me acompañen hoy, a probar el modulo de python, http.server. Veremos los métodos y clases que este modulo nos proporciona, veremos varios ejemplo, y los implementaremos en Python (Obvio :D).

¿Están listos? Pues comencemos.

Imagen relacionada

¿HTTP? ¿Que es eso?

Antes de comenzar con el modulo, primero conozcamos el protocolo HTTP.

HTTP es el protocolo de Internet que utilizamos para acceder a las paginas web.
HTTP = Protocolo de Transferencia de HiperTexto

Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. El cliente realiza una petición enviando un mensaje, con cierto formato al servidor. El servidor le envía un mensaje de respuesta. Ejemplos de cliente son los navegadores web y las arañas web (también conocidas por su término inglés, webcrawlers).

En el resto del articulo conoceremos más acera de este protocolo.

El paquete HTTP.

http es un paquete que recopila varios módulos para trabajar con el protocolo de transferencia de hipertexto:
  • http.clientes un cliente de protocolo HTTP de bajo nivel; para el uso de apertura de URL de alto nivel urllib.request
  • http.server contiene clases básicas de servidores HTTP basadas en socketserver
  • http.cookies tiene utilidades para implementar la administración estatal con cookies
  • http.cookiejar Proporciona persistencia de cookies

Como hoy trabajaremos con servidores web, usaremos el modulo http.server, los otros módulos los veremos en artículos posteriores.

El modulo http.server, nos proporciona 4 clases, las cuales son:
  • HTTPServer
  • BaseHTTPRequestHandler
  • SimpleHTTPRequestHandler
  • CGIHTTPRequestHandler
Si quieres aprender más acerca de estas 4 clases, te sugiero visitar la Documentación de Python.

Nuestro primer servidor web.

Muy bien, ya tenemos conocimiento suficiente sobre el protocolo HTTP y el modulo http.server, hora de mi parte favorita, LOS EJEMPLOS!!!.

Los ejemplos los explicare linea por linea, así podremos entender mejor.

Primer Ejemplo:

En este primer ejemplo crearemos un servidor basico usando la clase SimpleHTTPRequestHandler, esta clase sirve archivos del directorio actual.

import http.server             #Comparte este articulo con tus amigos :D

import socketserver

PORT = 8000                               

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("Servidor en el puerto 8000")
    httpd.serve_forever()

Bueno, empecemos a desglosar este fragmento de codigo.

linea 1: Importamos el modulo http.server

linea 2: Importamos el modulo socketserver, recordemos la clase http.server esta basada en esta clase socketserver.

linea 3: Creamos una variable llamada PORT la cual contendrá el puerto del servidor, en este caso, 8000, si quieres cambiarlo, con gusto lo puedes hacer.

linea 4: Declaramos una variable llamada Handler la cual contendrá a la clase SimpleHTTPRequestHandler. 

linea 5: En esta linea vemos que esta en acción el modulo socketserver, de este modulo usamos el método TCPServer, al cual le pasamos 2 argumentos, el primer argumento sera una tupla, en la cual el primer elemento es una cadena vacía, si la dejamos vacía el servidor por defecto usara localhost, el segundo elemento es el numero del puerto, en este caso usamos la variable PORT, y el segundo argumento del método es la variable Handler.

linea 6: Imprimimos en pantalla avisándonos que el servidor esta en el puerto 8000.

linea 7 (Final): Por ultimo ponemos a andar al servidor con el método server_forever, recordemos que httpd ahora es una variable que contiene al TCPServer que creamos anteriormente.

Como mencione anteriormente, la clase SimpleHTTPRequetHandler, sirve archivos del directorio actual, ese significa que podemos subir cualquier archivo, por ejemplo una pagina HTML. Bueno, es momento de correr el programa, yo lo haré desde mi Consola de Windows.


Como puedes observar, yo me encuentro dentro de una carpeta llamada "Mi Diario Python", en la cual tengo un archivo HTML, debes estar atento en donde ejecutaras el programa.

Vemos que mi consola dice que hay un servidor en el puerto 8000, veamos si es cierto.
Vamos a dirigirnos a http://localhost:8000.


Si estas probando el programa, verán una lista con todos los archivos del directorio en donde se encuentren en su consola o en el directorio en donde se encuentra su programa, en mi caso, solo tengo un solo archivo llamado "mi diario python.html", el cual abriré.


Este es mi archivo que se encuentra en la carpeta en donde esta la consola que ejecuta mi código, recuerden estar atento en donde ejecuta su código y si lo hacen desde la consola como yo, estar pendiente en que carpeta se ejecutan las operaciones.

Segundo Ejemplo:

El código de este ejemplo lo puedes ver desde mi repositorio de GitHub: Codigo Del Segundo Ejemplo

En este ejemplo se hace usode la clase BaseHTTPRequestHandler, también se muestra el uso de métodos como send_header y send_response, así que te sugiero que experimentes con el código.

Al ejecutar el programa, sera lo mismo, nos tendremos que dirigir a http://localhost:8000, veremos una pagina como esta:


Como puedes observar, nos muestra un mensaje en formato HTML, ya que es una etiqueta h1, si se preguntan por que, échenle un ojo al código.


Bueno, eso a sido todo de mi parte, espero que te animes a experimentar más con este modulo, usar las otras clases, usar los métodos y mucho más, puedes compartir tu experiencia o tu código con nosotros escribiendo un comentario, mi nombre es Luis :D, y aquí me despido.

3 comentarios :
Write comentarios
  1. Muy bueno, pero por favor, corrige lo de "bacía" me ha dolido mucho eso.

    ResponderEliminar

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

Entradas más recientes

Powered by Blogger .