|
1 |
|
2 :mod:`SimpleHTTPServer` --- Simple HTTP request handler |
|
3 ======================================================= |
|
4 |
|
5 .. module:: SimpleHTTPServer |
|
6 :synopsis: This module provides a basic request handler for HTTP servers. |
|
7 .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il> |
|
8 |
|
9 .. note:: |
|
10 The :mod:`SimpleHTTPServer` module has been merged into :mod:`http.server` in |
|
11 Python 3.0. The :term:`2to3` tool will automatically adapt imports when |
|
12 converting your sources to 3.0. |
|
13 |
|
14 |
|
15 The :mod:`SimpleHTTPServer` module defines a single class, |
|
16 :class:`SimpleHTTPRequestHandler`, which is interface-compatible with |
|
17 :class:`BaseHTTPServer.BaseHTTPRequestHandler`. |
|
18 |
|
19 The :mod:`SimpleHTTPServer` module defines the following class: |
|
20 |
|
21 |
|
22 .. class:: SimpleHTTPRequestHandler(request, client_address, server) |
|
23 |
|
24 This class serves files from the current directory and below, directly |
|
25 mapping the directory structure to HTTP requests. |
|
26 |
|
27 A lot of the work, such as parsing the request, is done by the base class |
|
28 :class:`BaseHTTPServer.BaseHTTPRequestHandler`. This class implements the |
|
29 :func:`do_GET` and :func:`do_HEAD` functions. |
|
30 |
|
31 The following are defined as class-level attributes of |
|
32 :class:`SimpleHTTPRequestHandler`: |
|
33 |
|
34 |
|
35 .. attribute:: server_version |
|
36 |
|
37 This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is |
|
38 defined at the module level. |
|
39 |
|
40 |
|
41 .. attribute:: extensions_map |
|
42 |
|
43 A dictionary mapping suffixes into MIME types. The default is |
|
44 signified by an empty string, and is considered to be |
|
45 ``application/octet-stream``. The mapping is used case-insensitively, |
|
46 and so should contain only lower-cased keys. |
|
47 |
|
48 The :class:`SimpleHTTPRequestHandler` class defines the following methods: |
|
49 |
|
50 |
|
51 .. method:: do_HEAD() |
|
52 |
|
53 This method serves the ``'HEAD'`` request type: it sends the headers it |
|
54 would send for the equivalent ``GET`` request. See the :meth:`do_GET` |
|
55 method for a more complete explanation of the possible headers. |
|
56 |
|
57 |
|
58 .. method:: do_GET() |
|
59 |
|
60 The request is mapped to a local file by interpreting the request as a |
|
61 path relative to the current working directory. |
|
62 |
|
63 If the request was mapped to a directory, the directory is checked for a |
|
64 file named ``index.html`` or ``index.htm`` (in that order). If found, the |
|
65 file's contents are returned; otherwise a directory listing is generated |
|
66 by calling the :meth:`list_directory` method. This method uses |
|
67 :func:`os.listdir` to scan the directory, and returns a ``404`` error |
|
68 response if the :func:`listdir` fails. |
|
69 |
|
70 If the request was mapped to a file, it is opened and the contents are |
|
71 returned. Any :exc:`IOError` exception in opening the requested file is |
|
72 mapped to a ``404``, ``'File not found'`` error. Otherwise, the content |
|
73 type is guessed by calling the :meth:`guess_type` method, which in turn |
|
74 uses the *extensions_map* variable. |
|
75 |
|
76 A ``'Content-type:'`` header with the guessed content type is output, |
|
77 followed by a ``'Content-Length:'`` header with the file's size and a |
|
78 ``'Last-Modified:'`` header with the file's modification time. |
|
79 |
|
80 Then follows a blank line signifying the end of the headers, and then the |
|
81 contents of the file are output. If the file's MIME type starts with |
|
82 ``text/`` the file is opened in text mode; otherwise binary mode is used. |
|
83 |
|
84 For example usage, see the implementation of the :func:`test` function. |
|
85 |
|
86 .. versionadded:: 2.5 |
|
87 The ``'Last-Modified'`` header. |
|
88 |
|
89 |
|
90 .. seealso:: |
|
91 |
|
92 Module :mod:`BaseHTTPServer` |
|
93 Base class implementation for Web server and request handler. |
|
94 |