Python: servidor HTTP

La biblioteca estándar de Python viene con un servidor web incorporado que se puede invocar para una comunicación simple entre el cliente y el servidor web. El número de puerto se puede asignar mediante programación y se accede al servidor web a través de este puerto. Aunque no es un servidor web con todas las funciones que puede analizar muchos tipos de archivos, puede analizar archivos html estáticos simples y servirlos respondiéndoles con los códigos de respuesta requeridos.

El siguiente programa inicia un servidor web simple y lo abre en el puerto 8001. La ejecución exitosa del servidor se indica mediante el código de respuesta 200 como se muestra en la salida del programa.

import SimpleHTTPServer
import SocketServer
PORT = 8001
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

serving at port 8001
127.0.0.1 - - [14/Jun/2018 08:34:22] "GET / HTTP/1.1" 200 -

Sirviendo a un localhost

Si decidimos hacer que el servidor Python sea un host local que solo sirva al host local, entonces podemos usar el siguiente programa para hacerlo.

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
HandlerClass = SimpleHTTPRequestHandler
ServerClass  = BaseHTTPServer.HTTPServer
Protocol     = "HTTP/1.0"
if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('127.0.0.1', port)
HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()

Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:

Serving HTTP on 127.0.0.1 port 8000 ...