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.