| \section{\module{CGIHTTPServer} --- |
| CGI-capable HTTP request handler} |
| |
| |
| \declaremodule{standard}{CGIHTTPServer} |
| \platform{Unix} |
| \sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il} |
| \modulesynopsis{This module provides a request handler for HTTP servers |
| which can run CGI scripts.} |
| |
| |
| The \module{CGIHTTPServer} module defines a request-handler class, |
| interface compatible with |
| \class{BaseHTTPServer.BaseHTTPRequestHandler} and inherits behavior |
| from \class{SimpleHTTPServer.SimpleHTTPRequestHandler} but can also |
| run CGI scripts. |
| |
| \strong{Note:} This module is \UNIX{} dependent since it creates the |
| CGI process using \function{os.fork()} and \function{os.exec()}. |
| |
| The \module{CGIHTTPServer} module defines the following class: |
| |
| \begin{classdesc}{CGIHTTPRequestHandler}{request, client_address, server} |
| This class is used to serve either files or output of CGI scripts from |
| the current directory and below. Note that mapping HTTP hierarchic |
| structure to local directory structure is exactly as in |
| \class{SimpleHTTPServer.SimpleHTTPRequestHandler}. |
| |
| The class will however, run the CGI script, instead of serving it as a |
| file, if it guesses it to be a CGI script. Only directory-based CGI |
| are used --- the other common server configuration is to treat special |
| extensions as denoting CGI scripts. |
| |
| The \function{do_GET()} and \function{do_HEAD()} functions are |
| modified to run CGI scripts and serve the output, instead of serving |
| files, if the request leads to somewhere below the |
| \code{cgi_directories} path. |
| \end{classdesc} |
| |
| The \class{CGIHTTPRequestHandler} defines the following data member: |
| |
| \begin{memberdesc}{cgi_directories} |
| This defaults to \code{['/cgi-bin', '/htbin']} and describes |
| directories to treat as containing CGI scripts. |
| \end{memberdesc} |
| |
| The \class{CGIHTTPRequestHandler} defines the following methods: |
| |
| \begin{methoddesc}{do_POST}{} |
| This method serves the \code{'POST'} request type, only allowed for |
| CGI scripts. Error 501, "Can only POST to CGI scripts", is output |
| when trying to POST to a non-CGI url. |
| \end{methoddesc} |
| |
| Note that CGI scripts will be run with UID of user nobody, for security |
| reasons. Problems with the CGI script will be translated to error 403. |
| |
| For example usage, see the implementation of the \function{test()} |
| function. |
| |
| |
| \begin{seealso} |
| \seemodule{BaseHTTPServer}{Base class implementation for Web server |
| and request handler.} |
| \end{seealso} |