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 (a] zadka.site.co.il> 8 9 .. note:: 10 The :mod:`SimpleHTTPServer` module has been merged into :mod:`http.server` in 11 Python 3. The :term:`2to3` tool will automatically adapt imports when 12 converting your sources to Python 3. 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 The :func:`test` function in the :mod:`SimpleHTTPServer` module is an 85 example which creates a server using the :class:`SimpleHTTPRequestHandler` 86 as the Handler. 87 88 .. versionadded:: 2.5 89 The ``'Last-Modified'`` header. 90 91 92 The :mod:`SimpleHTTPServer` module can be used in the following manner in order 93 to set up a very basic web server serving files relative to the current 94 directory. :: 95 96 import SimpleHTTPServer 97 import SocketServer 98 99 PORT = 8000 100 101 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 102 103 httpd = SocketServer.TCPServer(("", PORT), Handler) 104 105 print "serving at port", PORT 106 httpd.serve_forever() 107 108 The :mod:`SimpleHTTPServer` module can also be invoked directly using the 109 :option:`-m` switch of the interpreter with a ``port number`` argument. 110 Similar to the previous example, this serves the files relative to the 111 current directory. :: 112 113 python -m SimpleHTTPServer 8000 114 115 .. seealso:: 116 117 Module :mod:`BaseHTTPServer` 118 Base class implementation for Web server and request handler. 119 120