| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | :mod:`http.server` --- HTTP servers
 | 
					
						
							|  |  |  | ===================================
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | .. module:: http.server
 | 
					
						
							|  |  |  |    :synopsis: HTTP server and request handlers.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. index::
 | 
					
						
							|  |  |  |    pair: WWW; server
 | 
					
						
							|  |  |  |    pair: HTTP; protocol
 | 
					
						
							|  |  |  |    single: URL
 | 
					
						
							|  |  |  |    single: httpd
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-27 20:38:46 +00:00
										 |  |  | **Source code:** :source:`Lib/http/server.py`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | This module defines classes for implementing HTTP servers (Web servers).
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | One class, :class:`HTTPServer`, is a :class:`socketserver.TCPServer` subclass.
 | 
					
						
							|  |  |  | It creates and listens at the HTTP socket, dispatching the requests to a
 | 
					
						
							|  |  |  | handler.  Code to create and run the server looks like this::
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |    def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |        server_address = ('', 8000)
 | 
					
						
							|  |  |  |        httpd = server_class(server_address, handler_class)
 | 
					
						
							|  |  |  |        httpd.serve_forever()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. class:: HTTPServer(server_address, RequestHandlerClass)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    This class builds on the :class:`TCPServer` class by storing the server
 | 
					
						
							|  |  |  |    address as instance variables named :attr:`server_name` and
 | 
					
						
							|  |  |  |    :attr:`server_port`. The server is accessible by the handler, typically
 | 
					
						
							|  |  |  |    through the handler's :attr:`server` instance variable.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | The :class:`HTTPServer` must be given a *RequestHandlerClass* on instantiation,
 | 
					
						
							|  |  |  | of which this module provides three different variants:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | .. class:: BaseHTTPRequestHandler(request, client_address, server)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |    This class is used to handle the HTTP requests that arrive at the server.  By
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    itself, it cannot respond to any actual HTTP requests; it must be subclassed
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |    to handle each request method (e.g. GET or POST).
 | 
					
						
							|  |  |  |    :class:`BaseHTTPRequestHandler` provides a number of class and instance
 | 
					
						
							|  |  |  |    variables, and methods for use by subclasses.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    The handler will parse the request and the headers, then call a method
 | 
					
						
							|  |  |  |    specific to the request type. The method name is constructed from the
 | 
					
						
							|  |  |  |    request. For example, for the request method ``SPAM``, the :meth:`do_SPAM`
 | 
					
						
							|  |  |  |    method will be called with no arguments. All of the relevant information is
 | 
					
						
							|  |  |  |    stored in instance variables of the handler.  Subclasses should not need to
 | 
					
						
							|  |  |  |    override or extend the :meth:`__init__` method.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    :class:`BaseHTTPRequestHandler` has the following instance variables:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: client_address
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains a tuple of the form ``(host, port)`` referring to the client's
 | 
					
						
							|  |  |  |       address.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 66045,66048-66049,66053,66060,66062-66063,66065,66067,66071-66074,66080,66082-66083,66090-66093,66097-66099,66103,66105,66110,66118 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66045 | andrew.kuchling | 2008-08-26 19:27:18 -0500 (Tue, 26 Aug 2008) | 1 line
  Trim whitespace; add a few updates
........
  r66048 | andrew.kuchling | 2008-08-26 19:45:02 -0500 (Tue, 26 Aug 2008) | 1 line
  Add an item and a note
........
  r66049 | andrew.kuchling | 2008-08-26 21:12:18 -0500 (Tue, 26 Aug 2008) | 1 line
  Add various items
........
  r66053 | georg.brandl | 2008-08-28 04:40:18 -0500 (Thu, 28 Aug 2008) | 2 lines
  #3711: .dll isn't a valid Python extension anymore.
........
  r66060 | armin.rigo | 2008-08-29 16:21:52 -0500 (Fri, 29 Aug 2008) | 3 lines
  A collection of crashers, all variants of the idea
  of issue #3720.
........
  r66062 | georg.brandl | 2008-08-30 04:49:36 -0500 (Sat, 30 Aug 2008) | 2 lines
  #3730: mention "server" attribute explicitly.
........
  r66063 | georg.brandl | 2008-08-30 04:52:44 -0500 (Sat, 30 Aug 2008) | 2 lines
  #3716: fix typo.
........
  r66065 | georg.brandl | 2008-08-30 05:03:09 -0500 (Sat, 30 Aug 2008) | 2 lines
  #3569: eval() also accepts "exec"able code objects.
........
  r66067 | georg.brandl | 2008-08-30 08:17:39 -0500 (Sat, 30 Aug 2008) | 2 lines
  super() actually returns a super object.
........
  r66071 | andrew.kuchling | 2008-08-30 10:19:57 -0500 (Sat, 30 Aug 2008) | 1 line
  Partial edits from revision and tidying pass
........
  r66072 | andrew.kuchling | 2008-08-30 10:21:23 -0500 (Sat, 30 Aug 2008) | 1 line
  Tidy up some sentences
........
  r66073 | andrew.kuchling | 2008-08-30 10:25:47 -0500 (Sat, 30 Aug 2008) | 1 line
  Correction from Antoine Pitrou: BufferedWriter and Reader support seek()
........
  r66074 | andrew.kuchling | 2008-08-30 11:44:54 -0500 (Sat, 30 Aug 2008) | 1 line
  Edit four more sections
........
  r66080 | georg.brandl | 2008-08-30 17:00:28 -0500 (Sat, 30 Aug 2008) | 2 lines
  Fix markup.
........
  r66082 | andrew.kuchling | 2008-08-30 17:56:54 -0500 (Sat, 30 Aug 2008) | 1 line
  More edits; markup fixes
........
  r66083 | andrew.kuchling | 2008-08-30 21:24:08 -0500 (Sat, 30 Aug 2008) | 1 line
  More edits
........
  r66090 | andrew.kuchling | 2008-08-31 09:29:31 -0500 (Sun, 31 Aug 2008) | 1 line
  Edit the library section, rearranging items to flow better and making lots of edits
........
  r66091 | andrew.kuchling | 2008-08-31 10:41:48 -0500 (Sun, 31 Aug 2008) | 1 line
  Last batch of edits; remove the 'other changes' section
........
  r66092 | andrew.kuchling | 2008-08-31 10:48:44 -0500 (Sun, 31 Aug 2008) | 1 line
  Update patch/bug count
........
  r66093 | gregory.p.smith | 2008-08-31 11:34:18 -0500 (Sun, 31 Aug 2008) | 3 lines
  issue3715: docstring representation of hex escaped string needs to be double
  escaped.
........
  r66097 | benjamin.peterson | 2008-09-01 09:13:43 -0500 (Mon, 01 Sep 2008) | 4 lines
  #3703 unhelpful _fileio.FileIO error message when trying to open a directory
  Reviewer: Gregory P. Smith
........
  r66098 | georg.brandl | 2008-09-01 09:15:55 -0500 (Mon, 01 Sep 2008) | 2 lines
  #3749: fix c'n'p errors.
........
  r66099 | benjamin.peterson | 2008-09-01 09:18:30 -0500 (Mon, 01 Sep 2008) | 4 lines
  Fix compilation when --without-threads is given #3683
  Reviewer: Georg Brandl, Benjamin Peterson
........
  r66103 | vinay.sajip | 2008-09-01 09:30:10 -0500 (Mon, 01 Sep 2008) | 1 line
  logging: fixed lack of use of encoding attribute specified on a stream.
........
  r66105 | vinay.sajip | 2008-09-01 09:33:59 -0500 (Mon, 01 Sep 2008) | 1 line
  logging: fixed lack of use of encoding attribute specified on a stream.
........
  r66110 | vinay.sajip | 2008-09-01 10:08:07 -0500 (Mon, 01 Sep 2008) | 1 line
  Added section about configuring logging in a library. Thanks to Thomas Heller for the idea.
........
  r66118 | vinay.sajip | 2008-09-01 12:44:14 -0500 (Mon, 01 Sep 2008) | 1 line
  Bug #3738: Documentation is now more accurate in describing handler close methods.
........
											
										 
											2008-09-02 00:31:15 +00:00
										 |  |  |    .. attribute:: server
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Contains the server instance.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: command
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains the command (request type). For example, ``'GET'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: path
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains the request path.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: request_version
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains the version string from the request. For example, ``'HTTP/1.0'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: headers
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Holds an instance of the class specified by the :attr:`MessageClass` class
 | 
					
						
							|  |  |  |       variable. This instance parses and manages the headers in the HTTP
 | 
					
						
							|  |  |  |       request.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: rfile
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains an input stream, positioned at the start of the optional input
 | 
					
						
							|  |  |  |       data.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: wfile
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains the output stream for writing a response back to the
 | 
					
						
							|  |  |  |       client. Proper adherence to the HTTP protocol must be used when writing to
 | 
					
						
							|  |  |  |       this stream.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    :class:`BaseHTTPRequestHandler` has the following class variables:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: server_version
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Specifies the server software version.  You may want to override this. The
 | 
					
						
							|  |  |  |       format is multiple whitespace-separated strings, where each string is of
 | 
					
						
							|  |  |  |       the form name[/version]. For example, ``'BaseHTTP/0.2'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: sys_version
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Contains the Python system version, in a form usable by the
 | 
					
						
							|  |  |  |       :attr:`version_string` method and the :attr:`server_version` class
 | 
					
						
							|  |  |  |       variable. For example, ``'Python/1.4'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: error_message_format
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Specifies a format string for building an error response to the client. It
 | 
					
						
							|  |  |  |       uses parenthesized, keyed format specifiers, so the format operand must be
 | 
					
						
							|  |  |  |       a dictionary. The *code* key should be an integer, specifying the numeric
 | 
					
						
							|  |  |  |       HTTP error code value. *message* should be a string containing a
 | 
					
						
							|  |  |  |       (detailed) error message of what occurred, and *explain* should be an
 | 
					
						
							|  |  |  |       explanation of the error code number. Default *message* and *explain*
 | 
					
						
							|  |  |  |       values can found in the *responses* class variable.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: error_content_type
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60964,60966-60967,60971,60977,60979-60989 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60980 | georg.brandl | 2008-02-23 16:02:28 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1492: allow overriding BaseHTTPServer's content type for error messages.
........
  r60982 | georg.brandl | 2008-02-23 16:06:25 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2165: fix test_logging failure on some machines.
........
  r60983 | facundo.batista | 2008-02-23 16:07:35 +0100 (Sat, 23 Feb 2008) | 6 lines
  Issue 1089358.  Adds the siginterrupt() function, that is just a
  wrapper around the system call with the same name.  Also added
  test cases, doc changes and NEWS entry. Thanks Jason and Ralf
  Schmitt.
........
  r60984 | georg.brandl | 2008-02-23 16:11:18 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2067: file.__exit__() now calls subclasses' close() method.
........
  r60985 | georg.brandl | 2008-02-23 16:19:54 +0100 (Sat, 23 Feb 2008) | 2 lines
  More difflib examples. Written for GHOP by Josip Dzolonga.
........
  r60987 | andrew.kuchling | 2008-02-23 16:41:51 +0100 (Sat, 23 Feb 2008) | 1 line
  #2072: correct documentation for .rpc_paths
........
  r60988 | georg.brandl | 2008-02-23 16:43:48 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2161: Fix opcode name.
........
  r60989 | andrew.kuchling | 2008-02-23 16:49:35 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1119331: ncurses will just call exit() if the terminal name isn't found.
  Call setupterm() first so that we get a Python exception instead of just existing.
........
											
										 
											2008-02-23 16:23:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Specifies the Content-Type HTTP header of error responses sent to the
 | 
					
						
							|  |  |  |       client.  The default value is ``'text/html'``.
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60964,60966-60967,60971,60977,60979-60989 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60980 | georg.brandl | 2008-02-23 16:02:28 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1492: allow overriding BaseHTTPServer's content type for error messages.
........
  r60982 | georg.brandl | 2008-02-23 16:06:25 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2165: fix test_logging failure on some machines.
........
  r60983 | facundo.batista | 2008-02-23 16:07:35 +0100 (Sat, 23 Feb 2008) | 6 lines
  Issue 1089358.  Adds the siginterrupt() function, that is just a
  wrapper around the system call with the same name.  Also added
  test cases, doc changes and NEWS entry. Thanks Jason and Ralf
  Schmitt.
........
  r60984 | georg.brandl | 2008-02-23 16:11:18 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2067: file.__exit__() now calls subclasses' close() method.
........
  r60985 | georg.brandl | 2008-02-23 16:19:54 +0100 (Sat, 23 Feb 2008) | 2 lines
  More difflib examples. Written for GHOP by Josip Dzolonga.
........
  r60987 | andrew.kuchling | 2008-02-23 16:41:51 +0100 (Sat, 23 Feb 2008) | 1 line
  #2072: correct documentation for .rpc_paths
........
  r60988 | georg.brandl | 2008-02-23 16:43:48 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2161: Fix opcode name.
........
  r60989 | andrew.kuchling | 2008-02-23 16:49:35 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1119331: ncurses will just call exit() if the terminal name isn't found.
  Call setupterm() first so that we get a Python exception instead of just existing.
........
											
										 
											2008-02-23 16:23:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: protocol_version
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       This specifies the HTTP protocol version used in responses.  If set to
 | 
					
						
							|  |  |  |       ``'HTTP/1.1'``, the server will permit HTTP persistent connections;
 | 
					
						
							|  |  |  |       however, your server *must* then include an accurate ``Content-Length``
 | 
					
						
							|  |  |  |       header (using :meth:`send_header`) in all of its responses to clients.
 | 
					
						
							|  |  |  |       For backwards compatibility, the setting defaults to ``'HTTP/1.0'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: MessageClass
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-06-12 18:52:31 +00:00
										 |  |  |       Specifies an :class:`email.message.Message`\ -like class to parse HTTP
 | 
					
						
							|  |  |  |       headers.  Typically, this is not overridden, and it defaults to
 | 
					
						
							|  |  |  |       :class:`http.client.HTTPMessage`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. attribute:: responses
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       This variable contains a mapping of error code integers to two-element tuples
 | 
					
						
							|  |  |  |       containing a short and long message. For example, ``{code: (shortmessage,
 | 
					
						
							|  |  |  |       longmessage)}``. The *shortmessage* is usually used as the *message* key in an
 | 
					
						
							|  |  |  |       error response, and *longmessage* as the *explain* key (see the
 | 
					
						
							|  |  |  |       :attr:`error_message_format` class variable).
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    A :class:`BaseHTTPRequestHandler` instance has the following methods:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: handle()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Calls :meth:`handle_one_request` once (or, if persistent connections are
 | 
					
						
							|  |  |  |       enabled, multiple times) to handle incoming HTTP requests. You should
 | 
					
						
							|  |  |  |       never need to override it; instead, implement appropriate :meth:`do_\*`
 | 
					
						
							|  |  |  |       methods.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: handle_one_request()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       This method will parse and dispatch the request to the appropriate
 | 
					
						
							|  |  |  |       :meth:`do_\*` method.  You should never need to override it.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-30 06:09:18 +00:00
										 |  |  |    .. method:: handle_expect_100()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       When a HTTP/1.1 compliant server receives a ``Expect: 100-continue``
 | 
					
						
							|  |  |  |       request header it responds back with a ``100 Continue`` followed by ``200
 | 
					
						
							|  |  |  |       OK`` headers.
 | 
					
						
							|  |  |  |       This method can be overridden to raise an error if the server does not
 | 
					
						
							|  |  |  |       want the client to continue.  For e.g. server can chose to send ``417
 | 
					
						
							|  |  |  |       Expectation Failed`` as a response header and ``return False``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 13:00:36 +00:00
										 |  |  |    .. method:: send_error(code, message=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Sends and logs a complete error reply to the client. The numeric *code*
 | 
					
						
							|  |  |  |       specifies the HTTP error code, with *message* as optional, more specific text. A
 | 
					
						
							|  |  |  |       complete set of headers is sent, followed by text composed using the
 | 
					
						
							|  |  |  |       :attr:`error_message_format` class variable.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 13:00:36 +00:00
										 |  |  |    .. method:: send_response(code, message=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-09 23:25:02 +08:00
										 |  |  |       Adds a response header to the headers buffer and logs the accepted
 | 
					
						
							| 
									
										
										
										
											2011-05-11 16:04:28 +08:00
										 |  |  |       request. The HTTP response line is written to the internal buffer,
 | 
					
						
							|  |  |  |       followed by *Server* and *Date* headers. The values for these two headers
 | 
					
						
							|  |  |  |       are picked up from the :meth:`version_string` and
 | 
					
						
							|  |  |  |       :meth:`date_time_string` methods, respectively. If the server does not
 | 
					
						
							|  |  |  |       intend to send any other headers using the :meth:`send_header` method,
 | 
					
						
							| 
									
										
										
										
											2011-05-12 01:10:57 +03:00
										 |  |  |       then :meth:`send_response` should be followed by a :meth:`end_headers`
 | 
					
						
							|  |  |  |       call.
 | 
					
						
							| 
									
										
										
										
											2011-05-11 16:04:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-12 01:10:57 +03:00
										 |  |  |       .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |          Headers are stored to an internal buffer and :meth:`end_headers`
 | 
					
						
							|  |  |  |          needs to be called explicitly.
 | 
					
						
							| 
									
										
										
										
											2011-05-11 16:04:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: send_header(keyword, value)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-09 23:25:02 +08:00
										 |  |  |       Adds the HTTP header to an internal buffer which will be written to the
 | 
					
						
							| 
									
										
										
										
											2011-05-11 11:45:48 +08:00
										 |  |  |       output stream when either :meth:`end_headers` or :meth:`flush_headers` is
 | 
					
						
							|  |  |  |       invoked. *keyword* should specify the header keyword, with *value*
 | 
					
						
							|  |  |  |       specifying its value. Note that, after the send_header calls are done,
 | 
					
						
							|  |  |  |       :meth:`end_headers` MUST BE called in order to complete the operation.
 | 
					
						
							| 
									
										
										
										
											2010-11-21 14:36:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-12 01:10:57 +03:00
										 |  |  |       .. versionchanged:: 3.2 Headers are stored in an internal buffer.
 | 
					
						
							| 
									
										
										
										
											2010-11-21 14:36:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-30 06:09:18 +00:00
										 |  |  |    .. method:: send_response_only(code, message=None)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Sends the reponse header only, used for the purposes when ``100
 | 
					
						
							| 
									
										
										
										
											2010-11-21 14:36:14 +00:00
										 |  |  |       Continue`` response is sent by the server to the client. The headers not
 | 
					
						
							|  |  |  |       buffered and sent directly the output stream.If the *message* is not
 | 
					
						
							|  |  |  |       specified, the HTTP message corresponding the response *code*  is sent.
 | 
					
						
							| 
									
										
										
										
											2010-09-30 06:09:18 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.2
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: end_headers()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-09 23:25:02 +08:00
										 |  |  |       Adds a blank line
 | 
					
						
							|  |  |  |       (indicating the end of the HTTP headers in the response)
 | 
					
						
							| 
									
										
										
										
											2011-05-12 01:10:57 +03:00
										 |  |  |       to the headers buffer and calls :meth:`flush_headers()`.
 | 
					
						
							| 
									
										
										
										
											2010-11-21 14:36:14 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-12 01:10:57 +03:00
										 |  |  |       .. versionchanged:: 3.2
 | 
					
						
							|  |  |  |          The buffered headers are written to the output stream.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-09 23:25:02 +08:00
										 |  |  |    .. method:: flush_headers()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       Finally send the headers to the output stream and flush the internal
 | 
					
						
							|  |  |  |       headers buffer.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionadded:: 3.3
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 13:00:36 +00:00
										 |  |  |    .. method:: log_request(code='-', size='-')
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Logs an accepted (successful) request. *code* should specify the numeric
 | 
					
						
							|  |  |  |       HTTP code associated with the response. If a size of the response is
 | 
					
						
							|  |  |  |       available, then it should be passed as the *size* parameter.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: log_error(...)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Logs an error when a request cannot be fulfilled. By default, it passes
 | 
					
						
							|  |  |  |       the message to :meth:`log_message`, so it takes the same arguments
 | 
					
						
							|  |  |  |       (*format* and additional values).
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: log_message(format, ...)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Logs an arbitrary message to ``sys.stderr``. This is typically overridden
 | 
					
						
							|  |  |  |       to create custom error logging mechanisms. The *format* argument is a
 | 
					
						
							|  |  |  |       standard printf-style format string, where the additional arguments to
 | 
					
						
							|  |  |  |       :meth:`log_message` are applied as inputs to the formatting. The client
 | 
					
						
							| 
									
										
										
										
											2012-04-29 13:41:03 +08:00
										 |  |  |       ip address and current date and time are prefixed to every message logged.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: version_string()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Returns the server software's version string. This is a combination of the
 | 
					
						
							|  |  |  |       :attr:`server_version` and :attr:`sys_version` class variables.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 13:00:36 +00:00
										 |  |  |    .. method:: date_time_string(timestamp=None)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-17 13:00:36 +00:00
										 |  |  |       Returns the date and time given by *timestamp* (which must be None or in
 | 
					
						
							|  |  |  |       the format returned by :func:`time.time`), formatted for a message
 | 
					
						
							|  |  |  |       header. If *timestamp* is omitted, it uses the current date and time.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       The result looks like ``'Sun, 06 Nov 1994 08:49:37 GMT'``.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: log_date_time_string()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |       Returns the current date and time, formatted for logging.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-25 01:59:09 +00:00
										 |  |  |    .. method:: address_string()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-29 12:51:54 +08:00
										 |  |  |       Returns the client address.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       .. versionchanged:: 3.3
 | 
					
						
							|  |  |  |          Previously, a name lookup was performed. To avoid name resolution
 | 
					
						
							|  |  |  |          delays, it now always returns the IP address.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | .. class:: 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
 | 
					
						
							|  |  |  |    :class:`BaseHTTPRequestHandler`.  This class implements the :func:`do_GET`
 | 
					
						
							|  |  |  |    and :func:`do_HEAD` functions.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The following are defined as class-level attributes of
 | 
					
						
							|  |  |  |    :class:`SimpleHTTPRequestHandler`:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: server_version
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is
 | 
					
						
							|  |  |  |       defined at the module level.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. attribute:: 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` class defines the following methods:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. method:: 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:: 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
 | 
					
						
							| 
									
										
										
										
											2011-10-12 20:10:51 +02:00
										 |  |  |       returned.  Any :exc:`OSError` exception in opening the requested file is
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |       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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  |       For example usage, see the implementation of the :func:`test` function
 | 
					
						
							|  |  |  |       invocation in the :mod:`http.server` module.
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  | The :class:`SimpleHTTPRequestHandler` class can be used in the following
 | 
					
						
							|  |  |  | manner in order to create a very basic webserver serving files relative to
 | 
					
						
							|  |  |  | the current directory. ::
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  |    import http.server
 | 
					
						
							|  |  |  |    import socketserver
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  |    PORT = 8000
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  |    Handler = http.server.SimpleHTTPRequestHandler
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  |    httpd = socketserver.TCPServer(("", PORT), Handler)
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  |    print("serving at port", PORT)
 | 
					
						
							|  |  |  |    httpd.serve_forever()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-03 10:22:10 +00:00
										 |  |  | :mod:`http.server` can also be invoked directly using the :option:`-m`
 | 
					
						
							| 
									
										
										
										
											2012-04-11 20:13:25 -04:00
										 |  |  | switch of the interpreter with a ``port number`` argument.  Similar to
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  | the previous example, this serves files relative to the current directory. ::
 | 
					
						
							| 
									
										
										
										
											2010-06-16 16:41:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         python -m http.server 8000
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-02 07:41:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  | .. 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:`SimpleHTTPRequestHandler`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. 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 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 method:
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |    .. method:: do_POST()
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |       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.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-26 16:32:26 +00:00
										 |  |  |    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.
 | 
					
						
							| 
									
										
										
										
											2012-06-03 16:15:54 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | :class:`CGIHTTPRequestHandler` can be enabled in the command line by passing
 | 
					
						
							|  |  |  | the ``--cgi`` option.::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         python -m http.server --cgi 8000
 | 
					
						
							|  |  |  | 
 |