| |
| :mod:`SimpleHTTPServer` --- Simple HTTP request handler |
| ======================================================= |
| |
| .. module:: SimpleHTTPServer |
| :synopsis: This module provides a basic request handler for HTTP servers. |
| .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> |
| |
| |
| The :mod:`SimpleHTTPServer` module defines a request-handler class, |
| interface-compatible with :class:`BaseHTTPServer.BaseHTTPRequestHandler`, that |
| serves files only from a base directory. |
| |
| The :mod:`SimpleHTTPServer` module defines the following class: |
| |
| |
| .. class:: SimpleHTTPRequestHandler(request, client_address, server) |
| |
| This class is used to serve files from the current directory and below, directly |
| mapping the directory structure to HTTP requests. |
| |
| A lot of the work, such as parsing the request, is done by the base class |
| :class:`BaseHTTPServer.BaseHTTPRequestHandler`. This class implements the |
| :func:`do_GET` and :func:`do_HEAD` functions. |
| |
| The :class:`SimpleHTTPRequestHandler` defines the following member variables: |
| |
| |
| .. attribute:: SimpleHTTPRequestHandler.server_version |
| |
| This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is defined |
| in the module. |
| |
| |
| .. attribute:: SimpleHTTPRequestHandler.extensions_map |
| |
| A dictionary mapping suffixes into MIME types. The default is signified by an |
| empty string, and is considered to be ``application/octet-stream``. The mapping |
| is used case-insensitively, and so should contain only lower-cased keys. |
| |
| The :class:`SimpleHTTPRequestHandler` defines the following methods: |
| |
| |
| .. method:: SimpleHTTPRequestHandler.do_HEAD() |
| |
| This method serves the ``'HEAD'`` request type: it sends the headers it would |
| send for the equivalent ``GET`` request. See the :meth:`do_GET` method for a |
| more complete explanation of the possible headers. |
| |
| |
| .. method:: SimpleHTTPRequestHandler.do_GET() |
| |
| The request is mapped to a local file by interpreting the request as a path |
| relative to the current working directory. |
| |
| If the request was mapped to a directory, the directory is checked for a file |
| named ``index.html`` or ``index.htm`` (in that order). If found, the file's |
| contents are returned; otherwise a directory listing is generated by calling the |
| :meth:`list_directory` method. This method uses :func:`os.listdir` to scan the |
| directory, and returns a ``404`` error response if the :func:`listdir` fails. |
| |
| If the request was mapped to a file, it is opened and the contents are returned. |
| Any :exc:`IOError` exception in opening the requested file is mapped to a |
| ``404``, ``'File not found'`` error. Otherwise, the content type is guessed by |
| calling the :meth:`guess_type` method, which in turn uses the *extensions_map* |
| variable. |
| |
| A ``'Content-type:'`` header with the guessed content type is output, followed |
| by a ``'Content-Length:'`` header with the file's size and a |
| ``'Last-Modified:'`` header with the file's modification time. |
| |
| Then follows a blank line signifying the end of the headers, and then the |
| contents of the file are output. If the file's MIME type starts with ``text/`` |
| the file is opened in text mode; otherwise binary mode is used. |
| |
| For example usage, see the implementation of the :func:`test` function. |
| |
| |
| .. seealso:: |
| |
| Module :mod:`BaseHTTPServer` |
| Base class implementation for Web server and request handler. |
| |