11.14 BaseHTTPServer Servidor HTTP básico

Este módulo define dos clases para implementar servidores HTTP (servidores web). Generalmente, este módulo no se usa directamente, sino que se usa como base para constuir servidores web funcionales. Mira los módulos SimpleHTTPServer y CGIHTTPServer.

La primera clase, HTTPServer, es una subclase de SocketServer.TCPServer. Crea el socket y escucha, enviando las peticiones a un gestor. El código para crear y hacer funcionar el servidor tiene el siguiente aspecto:

def run(server_class=BaseHTTPServer.HTTPServer,
        handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

HTTPServer (server_address, RequestHandlerClass)
Esta clase se contruye en la clase TCPServer mediante el almacenamiento de la dirección del servidor como variables de instancia denominadas server_name and server_port. El servidor es accesible para el gestor, generalmente a través de la variable de instancia del gestor server.

BaseHTTPRequestHandler (request, client_address, server)
Esta clase se usa para gestionar las peticiones HTTP que llegan al servidor. Por sí mismo, el servidor no puede responder a ninguna petición HTTP; debe haber una subclase para gestionar cada peticion (es decir, GET o POST). BaseHTTPRequestHandler nos ofrece una serie de variables de clase e instancias, y metodos a usar en las subclases

El gestor analizará la petición y los encabezados, y llamará al método específico del tipo de petición. El nombre del metodo se construye desde la petición. Por ejemplo, para la petición "SPAM", el método do_SPAM() será invocado sin argumentos. Todo la información relevante se almacenará en variables de instancia del gestor. Las subclases no deberan necesitar la sobreescritura o extensión del método __init__() method.

BaseHTTPRequestHandler tiene las siguientes variables de instancia:

client_address
Contiene una tupla de la forma (host, puerto) referida a la dirección del cliente.

command
Contiene la orden (tipo de petición). Por ejemplo, 'GET'.

path
Contiene la ruta de la petición.

request_version
Contiene la versión de la petición. Por ejemplo, 'HTTP/1.0'.

headers
Contiene una instancia de la clase especificada por la variable MessageClass Esta instancia analiza y gestiona los encabezados de la petición HTTP.

rfile
Contiene la cadena de entrada, colocada al principio de los datos entrantes opcionales.

wfile
Contiene el flujo de salida para enviar una respuesta de vuelta al cliente Se debe observar estrictamente el protocolo HTTP al escribir a este flujo.

BaseHTTPRequestHandler tiene las siguientes variables de clase:

server_version
Especifica la versión del software del servidor. Puede que desees sobreescribirla. El formato es una serie de cadenas separados por espacios en blanco, donde cada cadena tiene la forma nombre[/versión]. Por ejemplo, 'BaseHTTP/0.2'.

sys_version
Contiene la version del Python, en una forma util para el metodo version y para la clase version_servidor . Por ejemplo, 'Python/1.4'.

error_message_format
Especifica la cadena de formato para construir una respuesta de error para el cliente. Utiliza variables clave de sustitución, por lo que el operando de formato debe ser un diccionario. La clave código deberá ser un entero que indique el codigo numérico del error HTTP. mensaje deberá contener una cadena que indique una explicación detallada del error ocurrido, y explicación deberá contener una explicación del código numérico del error. Los valores por defecto para las variables mensaje y explicación se encuentran en la variable de clase responses.

protocol_version
Especifica la versión del protocolo HTTP utilizado en las respuestas Generalemente, esta variable no debería ser sobreescrita. Por defecto, su valor es 'HTTP/1.0'.

MessageClass
Especifica una clase del tipo rfc822.Message para analizar encabezados HTTP. to parse HTTP Generalmente, no se sobreescribe, y su valor por defecto es mimetools.Message.

responses
Esta variable contiene contiene una correspondencia entre los codigos de error y tuplas de dos elementos que contienen un mensaje corto y otro largo. Por ejemplo, {code: (mensaje_corto, mensaje_largo)}. El mensaje_corto se suele usar como clave del error message, y mensaje_largo como la clave de la explicación (mirate la variable formato_mensaje_error).

Una instancia de BaseHTTPRequestHandler tiene los siguientes métodos

handle ()
Redefine el metodo ' handle() de la superclase para ofrecer el comportamiento específico del gestor Este metodo analizará y remitirá la petición al metodo do_*() adecuado.

send_error (code[, message])
Envia una respuesta de error al cliente y la registra. El valor numérico code especifica el codio de error HTTP, con mensaje como texto opcional más específica. Un juego completo de encabezados es enviado, seguido del texto compuesto usando la variable de claseerror_message_format.

send_response (code[, message])
Envia un encabezado respuesta y almacena la peticion aceptada. La linea de respuesta HTTP es enviada, seguida de los encabezados Server y Date. Los valores de estos dos encabezados se extraen de los metodos version_string() y date_time_string(), respectivamente.

send_header (keyword, value)
Escribe un encabezado MIME específico para el flujo de salida. keyword es la palabra clave del encabezado y value su valor.

end_headers ()
Envía una linea en blanco, indicando el final de los encabezados MIME de la respuesta.

log_request ([code[, size]])
Registra una petición aceptada. code debería especificar el codigo numérico asociado HTTP con la respuesta. Si el tamaño de la respuesta está disponible, debería pasarse en el parámetro size

log_error (...)
Regsitra el error cuando la petición no ha podido ser satisfecha. Por defecto, se pasa el mensaje al metodo log_message(), así que se toman los mismos argumentos (format y valores adicionales).

log_message (format, ...)
Registra un mensaje arbitrario a sys.stderr. Se suele redefinir para crear mecanismos de rgistro de error personalizados. El argumento formato es una cadena con el formato del típico printf, donde los argumentos adicionales al metodo log_message() se pasan como entradas del formateado. La direccion del cliente y la fecha y hora actual son prefijadas para cada mensaje almacenado.

version_string ()
Devuelve la versión del software del servidor. Esta es una combinación de los miembros server_version y sys_version.

date_time_string ()
Devuelve la fecha y hora actual, formateada para un encabezado.

log_data_time_string ()
Devuelve la fecha y hora actual, formateada para registro.

address_string ()
Devuelve la dirección del cliente, formateada para registro. Se realiza una busqueda de nombre para la dirección IP del cliente.

Más informació en:

Module CGIHTTPServer:
Gestor extendido de peticiones que soporta scripts CGI.

Module SimpleHTTPServer:
Gestor básico de peticiones que limita la respuesta a archivos por debajo del raiz del documento.

Ver Sobre este documento... para obtener información sobre sugerencias.