1999-06-14 19:47:47 +00:00
|
|
|
\section{\module{CGIHTTPServer} ---
|
|
|
|
A Do-Something Request Handler}
|
|
|
|
|
|
|
|
|
|
|
|
\declaremodule{standard}{CGIHTTPServer}
|
2000-04-03 20:13:55 +00:00
|
|
|
\platform{Unix}
|
1999-06-14 19:47:47 +00:00
|
|
|
\sectionauthor{Moshe Zadka}{mzadka@geocities.com}
|
|
|
|
\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 behaviour
|
|
|
|
from \class{SimpleHTTPServer.SimpleHTTPRequestHandler} but can also
|
|
|
|
run CGI scripts.
|
|
|
|
|
2000-04-03 20:13:55 +00:00
|
|
|
\strong{Note:} This module is \UNIX{} dependent since it creates the
|
|
|
|
CGI process using \function{os.fork()} and \function{os.exec()}.
|
|
|
|
|
1999-06-14 19:47:47 +00:00
|
|
|
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}
|