| :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> | |
| .. note:: | |
| The :mod:`CGIHTTPServer` module has been merged into :mod:`http.server` in | |
| Python 3. The :term:`2to3` tool will automatically adapt imports when | |
| converting your sources to Python 3. | |
| 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. | |
| .. 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:: 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:: 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. | |