11.18 CGIHTTPServer -- Gestore di richieste HTTP con supporto CGI

Il modulo CGIHTTPServer definisce una classe di gestione (handler), con interfaccia compatibile con BaseHTTPServer.BaseHTTPRequestHandler, eredita le sue caratteristiche da SimpleHTTPServer.SimpleHTTPRequestHandler potendo anche eseguire script CGI.

Note: Questo modulo può eseguire script CGI su sistemi Unix e Windows; su sistemi Mac OS sarà in grado solo di eseguire script Python all'interno del suo stesso processo.

Il modulo CGIHTTPServer definisce le seguenti classi:

class CGIHTTPRequestHandler( request, client_address, server)
Questa classe viene usata per servire sia file che l'output di script CGI dalla directory corrente e sottostante. Notare che la mappatura della struttura gerarchica HTTP alla locale struttura di directory è esattamente la stessa che in SimpleHTTPServer.SimpleHTTPRequestHandler.

La classe comunque, esegue lo script CGI, invece di servirlo come file, se viene informata che l'oggetto è uno script CGI. Vengono utilizzati solo CGI basati su directory -- la configurazione dei server comuni è di trattare le estensioni speciali considerandole come script CGI.

Le funzioni do_GET() e do_HEAD() vengono modificate per eseguire gli script CGI e servire l'output, invece di servire i file, se la richiesta viene è fatta all'interno dei percorsi cgi_directories sottostanti.

La classe CGIHTTPRequestHandler definisce i seguenti dati membri:

cgi_directories
L'impostazione predefinita è ['/cgi-bin', '/htbin'] e descrive le directory in cui i file devono essere considerati script CGI.

La classe CGIHTTPRequestHandler definisce i seguenti metodi:

do_POST( )
Questo metodo serve le richieste di tipo 'POST', permesse solo per gli script CGI. Viene generato l'errore 501, "Can only POST to CGI scripts" quando si cerca di usare questa funzione con url non CGI.

Notare che gli script CGI verranno eseguiti con UID dell'utente nobody, per motivi di sicurezza. Problemi con gli script CGI verranno convertiti in errore 403.

Per un esempio sull'utilizzo, si veda l'implementazione della funzione test().

Vedete anche:

Modulo BaseHTTPServer:
Implementazione della classe base per server WEB e gestori di richieste.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.