• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`BaseHTTPServer` --- Basic HTTP server
2===========================================
3
4.. module:: BaseHTTPServer
5   :synopsis: Basic HTTP server (base class for SimpleHTTPServer and CGIHTTPServer).
6
7.. note::
8   The :mod:`BaseHTTPServer` module has been merged into :mod:`http.server` in
9   Python 3.  The :term:`2to3` tool will automatically adapt imports when
10   converting your sources to Python 3.
11
12
13.. index::
14   pair: WWW; server
15   pair: HTTP; protocol
16   single: URL
17   single: httpd
18   module: SimpleHTTPServer
19   module: CGIHTTPServer
20
21**Source code:** :source:`Lib/BaseHTTPServer.py`
22
23--------------
24
25This module defines two classes for implementing HTTP servers (Web servers).
26Usually, this module isn't used directly, but is used as a basis for building
27functioning Web servers. See the :mod:`SimpleHTTPServer` and
28:mod:`CGIHTTPServer` modules.
29
30The first class, :class:`HTTPServer`, is a :class:`SocketServer.TCPServer`
31subclass, and therefore implements the :class:`SocketServer.BaseServer`
32interface.  It creates and listens at the HTTP socket, dispatching the requests
33to a handler.  Code to create and run the server looks like this::
34
35   def run(server_class=BaseHTTPServer.HTTPServer,
36           handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
37       server_address = ('', 8000)
38       httpd = server_class(server_address, handler_class)
39       httpd.serve_forever()
40
41
42.. class:: HTTPServer(server_address, RequestHandlerClass)
43
44   This class builds on the :class:`TCPServer` class by storing the server
45   address as instance variables named :attr:`server_name` and
46   :attr:`server_port`. The server is accessible by the handler, typically
47   through the handler's :attr:`server` instance variable.
48
49
50.. class:: BaseHTTPRequestHandler(request, client_address, server)
51
52   This class is used to handle the HTTP requests that arrive at the server. By
53   itself, it cannot respond to any actual HTTP requests; it must be subclassed
54   to handle each request method (e.g. GET or
55   POST). :class:`BaseHTTPRequestHandler` provides a number of class and
56   instance variables, and methods for use by subclasses.
57
58   The handler will parse the request and the headers, then call a method
59   specific to the request type. The method name is constructed from the
60   request. For example, for the request method ``SPAM``, the :meth:`do_SPAM`
61   method will be called with no arguments. All of the relevant information is
62   stored in instance variables of the handler.  Subclasses should not need to
63   override or extend the :meth:`__init__` method.
64
65   :class:`BaseHTTPRequestHandler` has the following instance variables:
66
67
68   .. attribute:: client_address
69
70      Contains a tuple of the form ``(host, port)`` referring to the client's
71      address.
72
73
74   .. attribute:: server
75
76      Contains the server instance.
77
78
79   .. attribute:: command
80
81      Contains the command (request type). For example, ``'GET'``.
82
83
84   .. attribute:: path
85
86      Contains the request path.
87
88
89   .. attribute:: request_version
90
91      Contains the version string from the request. For example, ``'HTTP/1.0'``.
92
93
94   .. attribute:: headers
95
96      Holds an instance of the class specified by the :attr:`MessageClass` class
97      variable. This instance parses and manages the headers in the HTTP
98      request.
99
100
101   .. attribute:: rfile
102
103      Contains an input stream, positioned at the start of the optional input
104      data.
105
106
107   .. attribute:: wfile
108
109      Contains the output stream for writing a response back to the
110      client. Proper adherence to the HTTP protocol must be used when writing to
111      this stream.
112
113
114   :class:`BaseHTTPRequestHandler` has the following class variables:
115
116
117   .. attribute:: server_version
118
119      Specifies the server software version.  You may want to override this. The
120      format is multiple whitespace-separated strings, where each string is of
121      the form name[/version]. For example, ``'BaseHTTP/0.2'``.
122
123
124   .. attribute:: sys_version
125
126      Contains the Python system version, in a form usable by the
127      :attr:`version_string` method and the :attr:`server_version` class
128      variable. For example, ``'Python/1.4'``.
129
130
131   .. attribute:: error_message_format
132
133      Specifies a format string for building an error response to the client. It
134      uses parenthesized, keyed format specifiers, so the format operand must be
135      a dictionary. The *code* key should be an integer, specifying the numeric
136      HTTP error code value. *message* should be a string containing a
137      (detailed) error message of what occurred, and *explain* should be an
138      explanation of the error code number. Default *message* and *explain*
139      values can found in the *responses* class variable.
140
141
142   .. attribute:: error_content_type
143
144      Specifies the Content-Type HTTP header of error responses sent to the
145      client.  The default value is ``'text/html'``.
146
147      .. versionadded:: 2.6
148         Previously, the content type was always ``'text/html'``.
149
150
151   .. attribute:: protocol_version
152
153      This specifies the HTTP protocol version used in responses.  If set to
154      ``'HTTP/1.1'``, the server will permit HTTP persistent connections;
155      however, your server *must* then include an accurate ``Content-Length``
156      header (using :meth:`send_header`) in all of its responses to clients.
157      For backwards compatibility, the setting defaults to ``'HTTP/1.0'``.
158
159
160   .. attribute:: MessageClass
161
162      .. index:: single: Message (in module mimetools)
163
164      Specifies a :class:`rfc822.Message`\ -like class to parse HTTP headers.
165      Typically, this is not overridden, and it defaults to
166      :class:`mimetools.Message`.
167
168
169   .. attribute:: responses
170
171      This variable contains a mapping of error code integers to two-element tuples
172      containing a short and long message. For example, ``{code: (shortmessage,
173      longmessage)}``. The *shortmessage* is usually used as the *message* key in an
174      error response, and *longmessage* as the *explain* key (see the
175      :attr:`error_message_format` class variable).
176
177
178   A :class:`BaseHTTPRequestHandler` instance has the following methods:
179
180
181   .. method:: handle()
182
183      Calls :meth:`handle_one_request` once (or, if persistent connections are
184      enabled, multiple times) to handle incoming HTTP requests. You should
185      never need to override it; instead, implement appropriate :meth:`do_\*`
186      methods.
187
188
189   .. method:: handle_one_request()
190
191      This method will parse and dispatch the request to the appropriate
192      :meth:`do_\*` method.  You should never need to override it.
193
194
195   .. method:: send_error(code[, message])
196
197      Sends and logs a complete error reply to the client. The numeric *code*
198      specifies the HTTP error code, with *message* as optional, more specific text. A
199      complete set of headers is sent, followed by text composed using the
200      :attr:`error_message_format` class variable. The body will be empty
201      if the method is HEAD or the response code is one of the following:
202      ``1xx``, ``204 No Content``, ``205 Reset Content``,
203      ``304 Not Modified``.
204
205
206   .. method:: send_response(code[, message])
207
208      Sends a response header and logs the accepted request. The HTTP response
209      line is sent, followed by *Server* and *Date* headers. The values for
210      these two headers are picked up from the :meth:`version_string` and
211      :meth:`date_time_string` methods, respectively.
212
213
214   .. method:: send_header(keyword, value)
215
216      Writes a specific HTTP header to the output stream. *keyword* should
217      specify the header keyword, with *value* specifying its value.
218
219
220   .. method:: end_headers()
221
222      Sends a blank line, indicating the end of the HTTP headers in the
223      response.
224
225
226   .. method:: log_request([code[, size]])
227
228      Logs an accepted (successful) request. *code* should specify the numeric
229      HTTP code associated with the response. If a size of the response is
230      available, then it should be passed as the *size* parameter.
231
232
233   .. method:: log_error(...)
234
235      Logs an error when a request cannot be fulfilled. By default, it passes
236      the message to :meth:`log_message`, so it takes the same arguments
237      (*format* and additional values).
238
239
240   .. method:: log_message(format, ...)
241
242      Logs an arbitrary message to ``sys.stderr``. This is typically overridden
243      to create custom error logging mechanisms. The *format* argument is a
244      standard printf-style format string, where the additional arguments to
245      :meth:`log_message` are applied as inputs to the formatting. The client
246      ip address and current date and time are prefixed to every message logged.
247
248
249   .. method:: version_string()
250
251      Returns the server software's version string. This is a combination of the
252      :attr:`server_version` and :attr:`sys_version` class variables.
253
254
255   .. method:: date_time_string([timestamp])
256
257      Returns the date and time given by *timestamp* (which must be in the
258      format returned by :func:`time.time`), formatted for a message header. If
259      *timestamp* is omitted, it uses the current date and time.
260
261      The result looks like ``'Sun, 06 Nov 1994 08:49:37 GMT'``.
262
263      .. versionadded:: 2.5
264         The *timestamp* parameter.
265
266
267   .. method:: log_date_time_string()
268
269      Returns the current date and time, formatted for logging.
270
271
272   .. method:: address_string()
273
274      Returns the client address, formatted for logging. A name lookup is
275      performed on the client's IP address.
276
277
278More examples
279-------------
280
281To create a server that doesn't run forever, but until some condition is
282fulfilled::
283
284   def run_while_true(server_class=BaseHTTPServer.HTTPServer,
285                      handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
286       """
287       This assumes that keep_running() is a function of no arguments which
288       is tested initially and after each request.  If its return value
289       is true, the server continues.
290       """
291       server_address = ('', 8000)
292       httpd = server_class(server_address, handler_class)
293       while keep_running():
294           httpd.handle_request()
295
296
297.. seealso::
298
299   Module :mod:`CGIHTTPServer`
300      Extended request handler that supports CGI scripts.
301
302   Module :mod:`SimpleHTTPServer`
303      Basic request handler that limits response to files actually under the
304      document root.
305
306