|  | 
 | :mod:`CGIHTTPServer` --- CGI-capable HTTP request handler | 
 | ========================================================= | 
 |  | 
 | .. module:: CGIHTTPServer | 
 |    :synopsis: This module provides a request handler for HTTP servers which can run CGI | 
 |               scripts. | 
 | .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> | 
 |  | 
 |  | 
 | The :mod:`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. | 
 |  | 
 | .. note:: | 
 |  | 
 |    This module can run CGI scripts on Unix and Windows systems; on Mac OS it will | 
 |    only be able to run Python scripts within the same process as itself. | 
 |  | 
 | .. note:: | 
 |  | 
 |    CGI scripts run by the :class:`CGIHTTPRequestHandler` class cannot execute | 
 |    redirects (HTTP code 302), because code 200 (script output follows) is sent | 
 |    prior to execution of the CGI script.  This pre-empts the status code. | 
 |  | 
 | The :mod:`CGIHTTPServer` module defines the following class: | 
 |  | 
 |  | 
 | .. class:: 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 :func:`do_GET` and :func:`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 ``cgi_directories`` path. | 
 |  | 
 | The :class:`CGIHTTPRequestHandler` defines the following data member: | 
 |  | 
 |  | 
 | .. attribute:: CGIHTTPRequestHandler.cgi_directories | 
 |  | 
 |    This defaults to ``['/cgi-bin', '/htbin']`` and describes directories to treat | 
 |    as containing CGI scripts. | 
 |  | 
 | The :class:`CGIHTTPRequestHandler` defines the following methods: | 
 |  | 
 |  | 
 | .. method:: CGIHTTPRequestHandler.do_POST() | 
 |  | 
 |    This method serves the ``'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. | 
 |  | 
 | 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 :func:`test` function. | 
 |  | 
 |  | 
 | .. seealso:: | 
 |  | 
 |    Module :mod:`BaseHTTPServer` | 
 |       Base class implementation for Web server and request handler. | 
 |  |