20.19. "SimpleHTTPServer" — Simple HTTP request handler ******************************************************* Note: The "SimpleHTTPServer" module has been merged into "http.server" in Python 3. The *2to3* tool will automatically adapt imports when converting your sources to Python 3. Warning: "SimpleHTTPServer" is not recommended for production. It only implements basic security checks. The "SimpleHTTPServer" module defines a single class, "SimpleHTTPRequestHandler", which is interface-compatible with "BaseHTTPServer.BaseHTTPRequestHandler". The "SimpleHTTPServer" module defines the following class: class SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server) This class serves 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 "BaseHTTPServer.BaseHTTPRequestHandler". This class implements the "do_GET()" and "do_HEAD()" functions. The following are defined as class-level attributes of "SimpleHTTPRequestHandler": server_version This will be ""SimpleHTTP/" + __version__", where "__version__" is defined at the module level. 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 "SimpleHTTPRequestHandler" class defines the following methods: do_HEAD() This method serves the "'HEAD'" request type: it sends the headers it would send for the equivalent "GET" request. See the "do_GET()" method for a more complete explanation of the possible headers. 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 "list_directory()" method. This method uses "os.listdir()" to scan the directory, and returns a "404" error response if the "listdir()" fails. If the request was mapped to a file, it is opened and the contents are returned. Any "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 "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. The "test()" function in the "SimpleHTTPServer" module is an example which creates a server using the "SimpleHTTPRequestHandler" as the Handler. New in version 2.5: The "'Last-Modified'" header. The "SimpleHTTPServer" module can be used in the following manner in order to set up a very basic web server serving files relative to the current directory. import SimpleHTTPServer import SocketServer PORT = 8000 Handler = SimpleHTTPServer.SimpleHTTPRequestHandler httpd = SocketServer.TCPServer(("", PORT), Handler) print "serving at port", PORT httpd.serve_forever() The "SimpleHTTPServer" module can also be invoked directly using the "-m" switch of the interpreter with a "port number" argument. Similar to the previous example, this serves the files relative to the current directory. python -m SimpleHTTPServer 8000 See also: Module "BaseHTTPServer" Base class implementation for Web server and request handler.