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