|
|
|
La libreria di riferimento di Python |
|
|
|
Questo modulo definisce due classi per implementare server HTTP
(server Web). Solitamente, questo modulo non viene utilizzato
direttamente, ma viene utilizzato come base per costruire server Web
funzionanti. Vedere i moduli
SimpleHTTPServer e
CGIHTTPServer.
La prima classe, HTTPServer, è una sotto classe
SocketServer.TCPServer. Crea ed ascolta su un socket HTTP,
trasferendo la richiesta ad un gestore. Il codice per creare ed
eseguire il server somiglia a questo:
def run(server_class=BaseHTTPServer.HTTPServer,
handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
httpd.serve_forever()
class HTTPServer( |
server_address, RequestHandlerClass) |
-
Questa classe costruisce sulla classe TCPServer memorizzando
l'indirizzo del server come variabile di istanza chiamata
server_name e server_port. Il server è accessibile
attraverso il gestore, tipicamente attraverso la variabile
server dell'istanza del gestore.
class BaseHTTPRequestHandler( |
request, client_address, server) |
-
Questa classe viene usata per gestire le richieste HTTP che arrivano
al server. Da solo, non è in grado di rispondere a nessuna richiesta
HTTP; deve essere derivato in una sotto classe per gestire ogni metodo
di richiesta (GET o POST). BaseHTTPRequestHandler fornisce
numerose classi, variabili d'istanza e metodi per l'uso attraverso le
sotto classi.
Il gestore analizzerà la richiesta e le intestazioni, quindi chiamerà
un metodo specifico per il tipo di richiesta. Il nome del metodo
viene costruito in base alla richiesta. Per esempio, per la richiesta
con metodo "SPAM", il metodo do_SPAM() verrà chiamato
senza alcun argomento. Tutte le informazioni rilevanti vengono
memorizzate in variabili d'istanza del gestore. Le sotto classi non
devono necessariamente sovrascrivere o estendere il metodo
__init__().
BaseHTTPRequestHandler ha le seguenti variabili d'istanza:
- client_address
-
Contiene una tupla nella forma
(host, porta)
che si
riferisce all'indirizzo del client.
- command
-
Contiene il comando (tipo di richiesta). Per esempio
'GET'
.
- path
-
Contiene il percorso richiesto.
- request_version
-
Contiene la stringa della versione nella richiesta. Per esempio,
'HTTP/1.0'
.
- headers
-
Mantiene le istanze della classe specificata dalla variabile di classe
MessageClass. L'istanza analizza e gestisce le intestazioni
della richiesta HTTP.
- rfile
-
Contiene uno flusso dell'input, posizionato all'inizio di eventuali dati
in input.
- wfile
-
Contiene il flusso dell'output per rispondere ad una richiesta del
client. Occorre mantenersi aderenti al protocollo HTTP quando si scrive
in questo flusso.
BaseHTTPRequestHandler possiede le seguenti variabili di classe:
- server_version
-
Specifica la versione del software del server. Questa variabile si
può sovrascrivere. Il formato è una stringa separata da spazi
multipli, dove ogni stringa è nella forma nome[/versione]. Per
esempio,
'BaseHTTP/0.2'
.
- sys_version
-
Contiene la versione del sistema Python in una forma usabile
attraverso il metodo version_string e la variabile di classe
server_version. Per esempio,
'Python/1.4'
.
- error_message_format
-
Specifica una stringa di formato per costruire un errore di risposta
al client. Utilizza specificatori di formato immodificabili e
racchiusi tra parentesi, cosicché l'operando di formato dovrà essere
un dizionario. La chiave di code dovrebbe essere un intero che
specifica il valore del codice numerico di errore HTTP. message
dovrebbe essere una stringa contenente un (dettagliato) messaggio di
errore di ciò che è accaduto e explain dovrebbe essere una
spiegazione del numero attribuito al codice di errore. Il messaggio
message predefinito e le spiegazioni explain possono
essere rinvenuti nelle variabili di classe delle risposte
responses.
- protocol_version
-
Questa è la specifica versione del protocollo HTTP utilizzato nelle
risposte. Se impostato a
'HTTP/1.1'
, il server consentirà
connessioni persistenti; il server deve comunque includere un'accurata
intestazione Content-Length
(utilizzando
send_header()) in tutte le sue risposte ai client. Per
retrocompatibilità, l'impostazione predefinita è 'HTTP/1.0'
.
- MessageClass
-
Specifica una classe corrispondente all'rfc822.Message per
analizzare le intestazioni HTTP. Tipicamente, questa non viene
sovrascritta ed il suo valore predefinito è mimetools.Message.
- responses
-
Questa variabile contiene una mappa tra gli interi dei codici di
errori e una serie di tuple di due elementi contenenti un breve e un
lungo messaggio. Per esempio,
{code: (shortmessage, longmessage)}
. Il
messaggio breve viene usato di solito per la chiave del messaggio in una
risposta di errore, e il messaggio lungo come la chiave di spiegazione
(vedere la variabile di classe error_message_format).
Un'istanza BaseHTTPRequestHandler possiede i seguenti metodi:
-
Chiama una volta handle_one_request() (o, se la connessione
persistente è abilitata, più volte) per gestire le richieste HTTP in
arrivo. Non ci sono motivi per sovrascrivere questo metodo; al suo
posto si possono implementare i più appropriati metodi
do_*().
-
Questo metodo analizza e invia la richiesta all'appropriato metodo
do_*(). Non si deve sovrascrivere questo metodo.
send_error( |
code[, message]) |
-
Invia e registra come log una risposta completa di errore al client.
Il codice numerico code indica il codice di errore HTTP, con
message facoltativo, contenente testo maggiormente specifico.
Un insieme completo di intestazioni viene inviato seguito dal testo
composto usando la variabile di classe error_message_format.
send_response( |
code[, message]) |
-
Invia un'instestazione di risposta e registra come log le richieste
accettate. La riga HTTP di risposta viene inviata, seguita dalle
intestazioni Server e Date. Il valore per queste due
intestazioni viene prelevato rispettivamente dai metodi
version_string() e date_time_string().
send_header( |
keyword, value) |
-
Scrive un'intestazione HTTP specifica sul flusso di uscita.
keyword dovrebbe specificare la chiave dell'intestazione, con
value che specifica il valore.
-
Invia una riga vuota, che indica la fine delle intestazioni HTTP nella
risposta.
log_request( |
[code[, size]]) |
-
Registra come log ed accetta (con successo) la richiesta. code
dovrebbe specificare il codice HTTP numerico associato alla risposta.
Se la dimensione della riposta è disponibile, dovrebbe venir passata
come parametro size.
-
Registra come log un errore quando una richiesta non può essere
pienamente soddisfatta. Il suo comportamento predefinito è passare il
messaggio a log_message(), in modo da acquisire gli stessi
argomenti (format ed ulteriori valori).
log_message( |
format, ...) |
-
Registra come log un messaggio arbitrario sul
sys.stderr
.
Questo metodo viene tipicamente sovrascritto per creare meccanismi di
logging di errori personalizzati. L'argomento format è una
stringa di formato standard in stile printf, dove gli argomenti
addizioniali per log_message() vengono applicati come input
nella formattazione. L'indirizzo del client, data ed ora correnti
vengono inseriti all'inizio di ogni messaggio registrato nei log.
-
Restituisce la stringa con la versione del software del server.
Questa è una combinazione delle variabili di classe
server_version e sys_version.
-
Restituisce la data e l'ora corrente, formattata per l'intestazione
di un messaggio.
-
Restituisce la data e l'ora corrente, formattata per il logging.
-
Restituisce l'indirizzo del client, formattato per il logging. Una
ricerca del nome viene eseguita sull'indirizzo IP del client.
Vedete anche:
- Modulo CGIHTTPServer:
- Gestore di richieste esteso, che supporta
gli scripts CGI.
- Modulo SimpleHTTPServer:
- Gestore di richieste di base che limita
le risposte ai file attuamente nella directory principale.
|
|
|
La libreria di riferimento di Python |
|
|
|
Release 2.3.4, documentation updated on 21. maggio 2005.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.