1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
<html xmlns="http://www.w3.org/1999/xhtml">
7
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9
<title>20.18. BaseHTTPServer — Basic HTTP server — Python 2.7.12 documentation</title>
11
<link rel="stylesheet" href="../_static/classic.css" type="text/css" />
12
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
14
<script type="text/javascript">
15
var DOCUMENTATION_OPTIONS = {
18
COLLAPSE_INDEX: false,
23
<script type="text/javascript" src="../_static/jquery.js"></script>
24
<script type="text/javascript" src="../_static/underscore.js"></script>
25
<script type="text/javascript" src="../_static/doctools.js"></script>
26
<script type="text/javascript" src="../_static/sidebar.js"></script>
27
<link rel="search" type="application/opensearchdescription+xml"
28
title="Search within Python 2.7.12 documentation"
29
href="../_static/opensearch.xml"/>
30
<link rel="author" title="About these documents" href="../about.html" />
31
<link rel="copyright" title="Copyright" href="../copyright.html" />
32
<link rel="top" title="Python 2.7.12 documentation" href="../contents.html" />
33
<link rel="up" title="20. Internet Protocols and Support" href="internet.html" />
34
<link rel="next" title="20.19. SimpleHTTPServer — Simple HTTP request handler" href="simplehttpserver.html" />
35
<link rel="prev" title="20.17. SocketServer — A framework for network servers" href="socketserver.html" />
36
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
37
<script type="text/javascript" src="../_static/copybutton.js"></script>
38
<script type="text/javascript" src="../_static/version_switch.js"></script>
43
<body role="document">
44
<div class="related" role="navigation" aria-label="related navigation">
47
<li class="right" style="margin-right: 10px">
48
<a href="../genindex.html" title="General Index"
49
accesskey="I">index</a></li>
51
<a href="../py-modindex.html" title="Python Module Index"
54
<a href="simplehttpserver.html" title="20.19. SimpleHTTPServer — Simple HTTP request handler"
55
accesskey="N">next</a> |</li>
57
<a href="socketserver.html" title="20.17. SocketServer — A framework for network servers"
58
accesskey="P">previous</a> |</li>
59
<li><img src="../_static/py.png" alt=""
60
style="vertical-align: middle; margin-top: -1px"/></li>
61
<li><a href="https://www.python.org/">Python</a> »</li>
63
<span class="version_switcher_placeholder">2.7.12</span>
64
<a href="../index.html">Documentation</a> »
67
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
68
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">20. Internet Protocols and Support</a> »</li>
72
<div class="document">
73
<div class="documentwrapper">
74
<div class="bodywrapper">
75
<div class="body" role="main">
77
<div class="section" id="module-BaseHTTPServer">
78
<span id="basehttpserver-basic-http-server"></span><h1>20.18. <a class="reference internal" href="#module-BaseHTTPServer" title="BaseHTTPServer: Basic HTTP server (base class for SimpleHTTPServer and CGIHTTPServer)."><code class="xref py py-mod docutils literal"><span class="pre">BaseHTTPServer</span></code></a> — Basic HTTP server<a class="headerlink" href="#module-BaseHTTPServer" title="Permalink to this headline">¶</a></h1>
79
<div class="admonition note">
80
<p class="first admonition-title">Note</p>
81
<p class="last">The <a class="reference internal" href="#module-BaseHTTPServer" title="BaseHTTPServer: Basic HTTP server (base class for SimpleHTTPServer and CGIHTTPServer)."><code class="xref py py-mod docutils literal"><span class="pre">BaseHTTPServer</span></code></a> module has been merged into <code class="xref py py-mod docutils literal"><span class="pre">http.server</span></code> in
82
Python 3. The <a class="reference internal" href="../glossary.html#term-2to3"><span class="xref std std-term">2to3</span></a> tool will automatically adapt imports when
83
converting your sources to Python 3.</p>
85
<p id="index-0"><strong>Source code:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/2.7/Lib/BaseHTTPServer.py">Lib/BaseHTTPServer.py</a></p>
86
<hr class="docutils" />
87
<p>This module defines two classes for implementing HTTP servers (Web servers).
88
Usually, this module isn’t used directly, but is used as a basis for building
89
functioning Web servers. See the <a class="reference internal" href="simplehttpserver.html#module-SimpleHTTPServer" title="SimpleHTTPServer: This module provides a basic request handler for HTTP servers."><code class="xref py py-mod docutils literal"><span class="pre">SimpleHTTPServer</span></code></a> and
90
<a class="reference internal" href="cgihttpserver.html#module-CGIHTTPServer" title="CGIHTTPServer: This module provides a request handler for HTTP servers which can run CGI scripts."><code class="xref py py-mod docutils literal"><span class="pre">CGIHTTPServer</span></code></a> modules.</p>
91
<p>The first class, <a class="reference internal" href="#BaseHTTPServer.HTTPServer" title="BaseHTTPServer.HTTPServer"><code class="xref py py-class docutils literal"><span class="pre">HTTPServer</span></code></a>, is a <a class="reference internal" href="socketserver.html#SocketServer.TCPServer" title="SocketServer.TCPServer"><code class="xref py py-class docutils literal"><span class="pre">SocketServer.TCPServer</span></code></a>
92
subclass, and therefore implements the <a class="reference internal" href="socketserver.html#SocketServer.BaseServer" title="SocketServer.BaseServer"><code class="xref py py-class docutils literal"><span class="pre">SocketServer.BaseServer</span></code></a>
93
interface. It creates and listens at the HTTP socket, dispatching the requests
94
to a handler. Code to create and run the server looks like this:</p>
95
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="n">server_class</span><span class="o">=</span><span class="n">BaseHTTPServer</span><span class="o">.</span><span class="n">HTTPServer</span><span class="p">,</span>
96
<span class="n">handler_class</span><span class="o">=</span><span class="n">BaseHTTPServer</span><span class="o">.</span><span class="n">BaseHTTPRequestHandler</span><span class="p">):</span>
97
<span class="n">server_address</span> <span class="o">=</span> <span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="mi">8000</span><span class="p">)</span>
98
<span class="n">httpd</span> <span class="o">=</span> <span class="n">server_class</span><span class="p">(</span><span class="n">server_address</span><span class="p">,</span> <span class="n">handler_class</span><span class="p">)</span>
99
<span class="n">httpd</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
103
<dt id="BaseHTTPServer.HTTPServer">
104
<em class="property">class </em><code class="descclassname">BaseHTTPServer.</code><code class="descname">HTTPServer</code><span class="sig-paren">(</span><em>server_address</em>, <em>RequestHandlerClass</em><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.HTTPServer" title="Permalink to this definition">¶</a></dt>
105
<dd><p>This class builds on the <code class="xref py py-class docutils literal"><span class="pre">TCPServer</span></code> class by storing the server
106
address as instance variables named <code class="xref py py-attr docutils literal"><span class="pre">server_name</span></code> and
107
<code class="xref py py-attr docutils literal"><span class="pre">server_port</span></code>. The server is accessible by the handler, typically
108
through the handler’s <code class="xref py py-attr docutils literal"><span class="pre">server</span></code> instance variable.</p>
112
<dt id="BaseHTTPServer.BaseHTTPRequestHandler">
113
<em class="property">class </em><code class="descclassname">BaseHTTPServer.</code><code class="descname">BaseHTTPRequestHandler</code><span class="sig-paren">(</span><em>request</em>, <em>client_address</em>, <em>server</em><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler" title="Permalink to this definition">¶</a></dt>
114
<dd><p>This class is used to handle the HTTP requests that arrive at the server. By
115
itself, it cannot respond to any actual HTTP requests; it must be subclassed
116
to handle each request method (e.g. GET or
117
POST). <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler" title="BaseHTTPServer.BaseHTTPRequestHandler"><code class="xref py py-class docutils literal"><span class="pre">BaseHTTPRequestHandler</span></code></a> provides a number of class and
118
instance variables, and methods for use by subclasses.</p>
119
<p>The handler will parse the request and the headers, then call a method
120
specific to the request type. The method name is constructed from the
121
request. For example, for the request method <code class="docutils literal"><span class="pre">SPAM</span></code>, the <code class="xref py py-meth docutils literal"><span class="pre">do_SPAM()</span></code>
122
method will be called with no arguments. All of the relevant information is
123
stored in instance variables of the handler. Subclasses should not need to
124
override or extend the <a class="reference internal" href="../reference/datamodel.html#object.__init__" title="object.__init__"><code class="xref py py-meth docutils literal"><span class="pre">__init__()</span></code></a> method.</p>
125
<p><a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler" title="BaseHTTPServer.BaseHTTPRequestHandler"><code class="xref py py-class docutils literal"><span class="pre">BaseHTTPRequestHandler</span></code></a> has the following instance variables:</p>
126
<dl class="attribute">
127
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.client_address">
128
<code class="descname">client_address</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.client_address" title="Permalink to this definition">¶</a></dt>
129
<dd><p>Contains a tuple of the form <code class="docutils literal"><span class="pre">(host,</span> <span class="pre">port)</span></code> referring to the client’s
133
<dl class="attribute">
134
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.server">
135
<code class="descname">server</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.server" title="Permalink to this definition">¶</a></dt>
136
<dd><p>Contains the server instance.</p>
139
<dl class="attribute">
140
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.command">
141
<code class="descname">command</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.command" title="Permalink to this definition">¶</a></dt>
142
<dd><p>Contains the command (request type). For example, <code class="docutils literal"><span class="pre">'GET'</span></code>.</p>
145
<dl class="attribute">
146
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.path">
147
<code class="descname">path</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.path" title="Permalink to this definition">¶</a></dt>
148
<dd><p>Contains the request path.</p>
151
<dl class="attribute">
152
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.request_version">
153
<code class="descname">request_version</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.request_version" title="Permalink to this definition">¶</a></dt>
154
<dd><p>Contains the version string from the request. For example, <code class="docutils literal"><span class="pre">'HTTP/1.0'</span></code>.</p>
157
<dl class="attribute">
158
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.headers">
159
<code class="descname">headers</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.headers" title="Permalink to this definition">¶</a></dt>
160
<dd><p>Holds an instance of the class specified by the <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.MessageClass" title="BaseHTTPServer.BaseHTTPRequestHandler.MessageClass"><code class="xref py py-attr docutils literal"><span class="pre">MessageClass</span></code></a> class
161
variable. This instance parses and manages the headers in the HTTP
165
<dl class="attribute">
166
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.rfile">
167
<code class="descname">rfile</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.rfile" title="Permalink to this definition">¶</a></dt>
168
<dd><p>Contains an input stream, positioned at the start of the optional input
172
<dl class="attribute">
173
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.wfile">
174
<code class="descname">wfile</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.wfile" title="Permalink to this definition">¶</a></dt>
175
<dd><p>Contains the output stream for writing a response back to the
176
client. Proper adherence to the HTTP protocol must be used when writing to
180
<p><a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler" title="BaseHTTPServer.BaseHTTPRequestHandler"><code class="xref py py-class docutils literal"><span class="pre">BaseHTTPRequestHandler</span></code></a> has the following class variables:</p>
181
<dl class="attribute">
182
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.server_version">
183
<code class="descname">server_version</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.server_version" title="Permalink to this definition">¶</a></dt>
184
<dd><p>Specifies the server software version. You may want to override this. The
185
format is multiple whitespace-separated strings, where each string is of
186
the form name[/version]. For example, <code class="docutils literal"><span class="pre">'BaseHTTP/0.2'</span></code>.</p>
189
<dl class="attribute">
190
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.sys_version">
191
<code class="descname">sys_version</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.sys_version" title="Permalink to this definition">¶</a></dt>
192
<dd><p>Contains the Python system version, in a form usable by the
193
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.version_string" title="BaseHTTPServer.BaseHTTPRequestHandler.version_string"><code class="xref py py-attr docutils literal"><span class="pre">version_string</span></code></a> method and the <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.server_version" title="BaseHTTPServer.BaseHTTPRequestHandler.server_version"><code class="xref py py-attr docutils literal"><span class="pre">server_version</span></code></a> class
194
variable. For example, <code class="docutils literal"><span class="pre">'Python/1.4'</span></code>.</p>
197
<dl class="attribute">
198
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.error_message_format">
199
<code class="descname">error_message_format</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.error_message_format" title="Permalink to this definition">¶</a></dt>
200
<dd><p>Specifies a format string for building an error response to the client. It
201
uses parenthesized, keyed format specifiers, so the format operand must be
202
a dictionary. The <em>code</em> key should be an integer, specifying the numeric
203
HTTP error code value. <em>message</em> should be a string containing a
204
(detailed) error message of what occurred, and <em>explain</em> should be an
205
explanation of the error code number. Default <em>message</em> and <em>explain</em>
206
values can found in the <em>responses</em> class variable.</p>
209
<dl class="attribute">
210
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.error_content_type">
211
<code class="descname">error_content_type</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.error_content_type" title="Permalink to this definition">¶</a></dt>
212
<dd><p>Specifies the Content-Type HTTP header of error responses sent to the
213
client. The default value is <code class="docutils literal"><span class="pre">'text/html'</span></code>.</p>
214
<div class="versionadded">
215
<p><span class="versionmodified">New in version 2.6: </span>Previously, the content type was always <code class="docutils literal"><span class="pre">'text/html'</span></code>.</p>
219
<dl class="attribute">
220
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.protocol_version">
221
<code class="descname">protocol_version</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.protocol_version" title="Permalink to this definition">¶</a></dt>
222
<dd><p>This specifies the HTTP protocol version used in responses. If set to
223
<code class="docutils literal"><span class="pre">'HTTP/1.1'</span></code>, the server will permit HTTP persistent connections;
224
however, your server <em>must</em> then include an accurate <code class="docutils literal"><span class="pre">Content-Length</span></code>
225
header (using <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.send_header" title="BaseHTTPServer.BaseHTTPRequestHandler.send_header"><code class="xref py py-meth docutils literal"><span class="pre">send_header()</span></code></a>) in all of its responses to clients.
226
For backwards compatibility, the setting defaults to <code class="docutils literal"><span class="pre">'HTTP/1.0'</span></code>.</p>
229
<dl class="attribute">
230
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.MessageClass">
231
<code class="descname">MessageClass</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.MessageClass" title="Permalink to this definition">¶</a></dt>
232
<dd><p id="index-1">Specifies a <a class="reference internal" href="rfc822.html#rfc822.Message" title="rfc822.Message"><code class="xref py py-class docutils literal"><span class="pre">rfc822.Message</span></code></a>-like class to parse HTTP headers.
233
Typically, this is not overridden, and it defaults to
234
<a class="reference internal" href="mimetools.html#mimetools.Message" title="mimetools.Message"><code class="xref py py-class docutils literal"><span class="pre">mimetools.Message</span></code></a>.</p>
237
<dl class="attribute">
238
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.responses">
239
<code class="descname">responses</code><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.responses" title="Permalink to this definition">¶</a></dt>
240
<dd><p>This variable contains a mapping of error code integers to two-element tuples
241
containing a short and long message. For example, <code class="docutils literal"><span class="pre">{code:</span> <span class="pre">(shortmessage,</span>
242
<span class="pre">longmessage)}</span></code>. The <em>shortmessage</em> is usually used as the <em>message</em> key in an
243
error response, and <em>longmessage</em> as the <em>explain</em> key (see the
244
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.error_message_format" title="BaseHTTPServer.BaseHTTPRequestHandler.error_message_format"><code class="xref py py-attr docutils literal"><span class="pre">error_message_format</span></code></a> class variable).</p>
247
<p>A <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler" title="BaseHTTPServer.BaseHTTPRequestHandler"><code class="xref py py-class docutils literal"><span class="pre">BaseHTTPRequestHandler</span></code></a> instance has the following methods:</p>
249
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.handle">
250
<code class="descname">handle</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.handle" title="Permalink to this definition">¶</a></dt>
251
<dd><p>Calls <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.handle_one_request" title="BaseHTTPServer.BaseHTTPRequestHandler.handle_one_request"><code class="xref py py-meth docutils literal"><span class="pre">handle_one_request()</span></code></a> once (or, if persistent connections are
252
enabled, multiple times) to handle incoming HTTP requests. You should
253
never need to override it; instead, implement appropriate <code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code>
258
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.handle_one_request">
259
<code class="descname">handle_one_request</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.handle_one_request" title="Permalink to this definition">¶</a></dt>
260
<dd><p>This method will parse and dispatch the request to the appropriate
261
<code class="xref py py-meth docutils literal"><span class="pre">do_*()</span></code> method. You should never need to override it.</p>
265
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.send_error">
266
<code class="descname">send_error</code><span class="sig-paren">(</span><em>code</em><span class="optional">[</span>, <em>message</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.send_error" title="Permalink to this definition">¶</a></dt>
267
<dd><p>Sends and logs a complete error reply to the client. The numeric <em>code</em>
268
specifies the HTTP error code, with <em>message</em> as optional, more specific text. A
269
complete set of headers is sent, followed by text composed using the
270
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.error_message_format" title="BaseHTTPServer.BaseHTTPRequestHandler.error_message_format"><code class="xref py py-attr docutils literal"><span class="pre">error_message_format</span></code></a> class variable. The body will be empty
271
if the method is HEAD or the response code is one of the following:
272
<code class="docutils literal"><span class="pre">1xx</span></code>, <code class="docutils literal"><span class="pre">204</span> <span class="pre">No</span> <span class="pre">Content</span></code>, <code class="docutils literal"><span class="pre">205</span> <span class="pre">Reset</span> <span class="pre">Content</span></code>,
273
<code class="docutils literal"><span class="pre">304</span> <span class="pre">Not</span> <span class="pre">Modified</span></code>.</p>
277
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.send_response">
278
<code class="descname">send_response</code><span class="sig-paren">(</span><em>code</em><span class="optional">[</span>, <em>message</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.send_response" title="Permalink to this definition">¶</a></dt>
279
<dd><p>Sends a response header and logs the accepted request. The HTTP response
280
line is sent, followed by <em>Server</em> and <em>Date</em> headers. The values for
281
these two headers are picked up from the <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.version_string" title="BaseHTTPServer.BaseHTTPRequestHandler.version_string"><code class="xref py py-meth docutils literal"><span class="pre">version_string()</span></code></a> and
282
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.date_time_string" title="BaseHTTPServer.BaseHTTPRequestHandler.date_time_string"><code class="xref py py-meth docutils literal"><span class="pre">date_time_string()</span></code></a> methods, respectively.</p>
286
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.send_header">
287
<code class="descname">send_header</code><span class="sig-paren">(</span><em>keyword</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.send_header" title="Permalink to this definition">¶</a></dt>
288
<dd><p>Writes a specific HTTP header to the output stream. <em>keyword</em> should
289
specify the header keyword, with <em>value</em> specifying its value.</p>
293
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.end_headers">
294
<code class="descname">end_headers</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.end_headers" title="Permalink to this definition">¶</a></dt>
295
<dd><p>Sends a blank line, indicating the end of the HTTP headers in the
300
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.log_request">
301
<code class="descname">log_request</code><span class="sig-paren">(</span><span class="optional">[</span><em>code</em><span class="optional">[</span>, <em>size</em><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_request" title="Permalink to this definition">¶</a></dt>
302
<dd><p>Logs an accepted (successful) request. <em>code</em> should specify the numeric
303
HTTP code associated with the response. If a size of the response is
304
available, then it should be passed as the <em>size</em> parameter.</p>
308
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.log_error">
309
<code class="descname">log_error</code><span class="sig-paren">(</span><em>...</em><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_error" title="Permalink to this definition">¶</a></dt>
310
<dd><p>Logs an error when a request cannot be fulfilled. By default, it passes
311
the message to <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_message" title="BaseHTTPServer.BaseHTTPRequestHandler.log_message"><code class="xref py py-meth docutils literal"><span class="pre">log_message()</span></code></a>, so it takes the same arguments
312
(<em>format</em> and additional values).</p>
316
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.log_message">
317
<code class="descname">log_message</code><span class="sig-paren">(</span><em>format</em>, <em>...</em><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_message" title="Permalink to this definition">¶</a></dt>
318
<dd><p>Logs an arbitrary message to <code class="docutils literal"><span class="pre">sys.stderr</span></code>. This is typically overridden
319
to create custom error logging mechanisms. The <em>format</em> argument is a
320
standard printf-style format string, where the additional arguments to
321
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_message" title="BaseHTTPServer.BaseHTTPRequestHandler.log_message"><code class="xref py py-meth docutils literal"><span class="pre">log_message()</span></code></a> are applied as inputs to the formatting. The client
322
ip address and current date and time are prefixed to every message logged.</p>
326
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.version_string">
327
<code class="descname">version_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.version_string" title="Permalink to this definition">¶</a></dt>
328
<dd><p>Returns the server software’s version string. This is a combination of the
329
<a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.server_version" title="BaseHTTPServer.BaseHTTPRequestHandler.server_version"><code class="xref py py-attr docutils literal"><span class="pre">server_version</span></code></a> and <a class="reference internal" href="#BaseHTTPServer.BaseHTTPRequestHandler.sys_version" title="BaseHTTPServer.BaseHTTPRequestHandler.sys_version"><code class="xref py py-attr docutils literal"><span class="pre">sys_version</span></code></a> class variables.</p>
333
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.date_time_string">
334
<code class="descname">date_time_string</code><span class="sig-paren">(</span><span class="optional">[</span><em>timestamp</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.date_time_string" title="Permalink to this definition">¶</a></dt>
335
<dd><p>Returns the date and time given by <em>timestamp</em> (which must be in the
336
format returned by <a class="reference internal" href="time.html#time.time" title="time.time"><code class="xref py py-func docutils literal"><span class="pre">time.time()</span></code></a>), formatted for a message header. If
337
<em>timestamp</em> is omitted, it uses the current date and time.</p>
338
<p>The result looks like <code class="docutils literal"><span class="pre">'Sun,</span> <span class="pre">06</span> <span class="pre">Nov</span> <span class="pre">1994</span> <span class="pre">08:49:37</span> <span class="pre">GMT'</span></code>.</p>
339
<div class="versionadded">
340
<p><span class="versionmodified">New in version 2.5: </span>The <em>timestamp</em> parameter.</p>
345
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.log_date_time_string">
346
<code class="descname">log_date_time_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.log_date_time_string" title="Permalink to this definition">¶</a></dt>
347
<dd><p>Returns the current date and time, formatted for logging.</p>
351
<dt id="BaseHTTPServer.BaseHTTPRequestHandler.address_string">
352
<code class="descname">address_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#BaseHTTPServer.BaseHTTPRequestHandler.address_string" title="Permalink to this definition">¶</a></dt>
353
<dd><p>Returns the client address, formatted for logging. A name lookup is
354
performed on the client’s IP address.</p>
359
<div class="section" id="more-examples">
360
<h2>20.18.1. More examples<a class="headerlink" href="#more-examples" title="Permalink to this headline">¶</a></h2>
361
<p>To create a server that doesn’t run forever, but until some condition is
363
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">run_while_true</span><span class="p">(</span><span class="n">server_class</span><span class="o">=</span><span class="n">BaseHTTPServer</span><span class="o">.</span><span class="n">HTTPServer</span><span class="p">,</span>
364
<span class="n">handler_class</span><span class="o">=</span><span class="n">BaseHTTPServer</span><span class="o">.</span><span class="n">BaseHTTPRequestHandler</span><span class="p">):</span>
365
<span class="sd">"""</span>
366
<span class="sd"> This assumes that keep_running() is a function of no arguments which</span>
367
<span class="sd"> is tested initially and after each request. If its return value</span>
368
<span class="sd"> is true, the server continues.</span>
369
<span class="sd"> """</span>
370
<span class="n">server_address</span> <span class="o">=</span> <span class="p">(</span><span class="s1">''</span><span class="p">,</span> <span class="mi">8000</span><span class="p">)</span>
371
<span class="n">httpd</span> <span class="o">=</span> <span class="n">server_class</span><span class="p">(</span><span class="n">server_address</span><span class="p">,</span> <span class="n">handler_class</span><span class="p">)</span>
372
<span class="k">while</span> <span class="n">keep_running</span><span class="p">():</span>
373
<span class="n">httpd</span><span class="o">.</span><span class="n">handle_request</span><span class="p">()</span>
376
<div class="admonition seealso">
377
<p class="first admonition-title">See also</p>
378
<dl class="last docutils">
379
<dt>Module <a class="reference internal" href="cgihttpserver.html#module-CGIHTTPServer" title="CGIHTTPServer: This module provides a request handler for HTTP servers which can run CGI scripts."><code class="xref py py-mod docutils literal"><span class="pre">CGIHTTPServer</span></code></a></dt>
380
<dd>Extended request handler that supports CGI scripts.</dd>
381
<dt>Module <a class="reference internal" href="simplehttpserver.html#module-SimpleHTTPServer" title="SimpleHTTPServer: This module provides a basic request handler for HTTP servers."><code class="xref py py-mod docutils literal"><span class="pre">SimpleHTTPServer</span></code></a></dt>
382
<dd>Basic request handler that limits response to files actually under the
393
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
394
<div class="sphinxsidebarwrapper">
395
<h3><a href="../contents.html">Table Of Contents</a></h3>
397
<li><a class="reference internal" href="#">20.18. <code class="docutils literal"><span class="pre">BaseHTTPServer</span></code> — Basic HTTP server</a><ul>
398
<li><a class="reference internal" href="#more-examples">20.18.1. More examples</a></li>
403
<h4>Previous topic</h4>
404
<p class="topless"><a href="socketserver.html"
405
title="previous chapter">20.17. <code class="docutils literal"><span class="pre">SocketServer</span></code> — A framework for network servers</a></p>
407
<p class="topless"><a href="simplehttpserver.html"
408
title="next chapter">20.19. <code class="docutils literal"><span class="pre">SimpleHTTPServer</span></code> — Simple HTTP request handler</a></p>
410
<ul class="this-page-menu">
411
<li><a href="../bugs.html">Report a Bug</a></li>
412
<li><a href="../_sources/library/basehttpserver.txt"
413
rel="nofollow">Show Source</a></li>
416
<div id="searchbox" style="display: none" role="search">
417
<h3>Quick search</h3>
418
<form class="search" action="../search.html" method="get">
419
<input type="text" name="q" />
420
<input type="submit" value="Go" />
421
<input type="hidden" name="check_keywords" value="yes" />
422
<input type="hidden" name="area" value="default" />
424
<p class="searchtip" style="font-size: 90%">
425
Enter search terms or a module, class or function name.
428
<script type="text/javascript">$('#searchbox').show(0);</script>
431
<div class="clearer"></div>
433
<div class="related" role="navigation" aria-label="related navigation">
436
<li class="right" style="margin-right: 10px">
437
<a href="../genindex.html" title="General Index"
440
<a href="../py-modindex.html" title="Python Module Index"
443
<a href="simplehttpserver.html" title="20.19. SimpleHTTPServer — Simple HTTP request handler"
446
<a href="socketserver.html" title="20.17. SocketServer — A framework for network servers"
448
<li><img src="../_static/py.png" alt=""
449
style="vertical-align: middle; margin-top: -1px"/></li>
450
<li><a href="https://www.python.org/">Python</a> »</li>
452
<span class="version_switcher_placeholder">2.7.12</span>
453
<a href="../index.html">Documentation</a> »
456
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
457
<li class="nav-item nav-item-2"><a href="internet.html" >20. Internet Protocols and Support</a> »</li>
461
© <a href="../copyright.html">Copyright</a> 1990-2016, Python Software Foundation.
463
The Python Software Foundation is a non-profit corporation.
464
<a href="https://www.python.org/psf/donations/">Please donate.</a>
466
Last updated on Sep 20, 2016.
467
<a href="../bugs.html">Found a bug</a>?
469
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.3.3.
b'\\ No newline at end of file'