~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-2.7.12-docs-html/library/basehttpserver.html

  • Committer: Dave Kuhlman
  • Date: 2017-04-15 16:24:56 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20170415162456-iav9vozzg4iwqwv3
Updated docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 
2
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
3
 
 
4
 
 
5
<html xmlns="http://www.w3.org/1999/xhtml">
 
6
  <head>
 
7
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
8
    
 
9
    <title>20.18. BaseHTTPServer — Basic HTTP server &mdash; Python 2.7.12 documentation</title>
 
10
    
 
11
    <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
 
12
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
 
13
    
 
14
    <script type="text/javascript">
 
15
      var DOCUMENTATION_OPTIONS = {
 
16
        URL_ROOT:    '../',
 
17
        VERSION:     '2.7.12',
 
18
        COLLAPSE_INDEX: false,
 
19
        FILE_SUFFIX: '.html',
 
20
        HAS_SOURCE:  true
 
21
      };
 
22
    </script>
 
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>
 
39
 
 
40
    
 
41
 
 
42
  </head>
 
43
  <body role="document">  
 
44
    <div class="related" role="navigation" aria-label="related navigation">
 
45
      <h3>Navigation</h3>
 
46
      <ul>
 
47
        <li class="right" style="margin-right: 10px">
 
48
          <a href="../genindex.html" title="General Index"
 
49
             accesskey="I">index</a></li>
 
50
        <li class="right" >
 
51
          <a href="../py-modindex.html" title="Python Module Index"
 
52
             >modules</a> |</li>
 
53
        <li class="right" >
 
54
          <a href="simplehttpserver.html" title="20.19. SimpleHTTPServer — Simple HTTP request handler"
 
55
             accesskey="N">next</a> |</li>
 
56
        <li class="right" >
 
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> &raquo;</li>
 
62
        <li>
 
63
          <span class="version_switcher_placeholder">2.7.12</span>
 
64
          <a href="../index.html">Documentation</a> &raquo;
 
65
        </li>
 
66
 
 
67
          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &raquo;</li>
 
68
          <li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">20. Internet Protocols and Support</a> &raquo;</li> 
 
69
      </ul>
 
70
    </div>    
 
71
 
 
72
    <div class="document">
 
73
      <div class="documentwrapper">
 
74
        <div class="bodywrapper">
 
75
          <div class="body" role="main">
 
76
            
 
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> &#8212; 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>
 
84
</div>
 
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&#8217;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">&#39;&#39;</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>
 
100
</pre></div>
 
101
</div>
 
102
<dl class="class">
 
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&#8217;s <code class="xref py py-attr docutils literal"><span class="pre">server</span></code> instance variable.</p>
 
109
</dd></dl>
 
110
 
 
111
<dl class="class">
 
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&#8217;s
 
130
address.</p>
 
131
</dd></dl>
 
132
 
 
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>
 
137
</dd></dl>
 
138
 
 
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>
 
143
</dd></dl>
 
144
 
 
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>
 
149
</dd></dl>
 
150
 
 
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>
 
155
</dd></dl>
 
156
 
 
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
 
162
request.</p>
 
163
</dd></dl>
 
164
 
 
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
 
169
data.</p>
 
170
</dd></dl>
 
171
 
 
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
 
177
this stream.</p>
 
178
</dd></dl>
 
179
 
 
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>
 
187
</dd></dl>
 
188
 
 
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>
 
195
</dd></dl>
 
196
 
 
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>
 
207
</dd></dl>
 
208
 
 
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>
 
216
</div>
 
217
</dd></dl>
 
218
 
 
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>
 
227
</dd></dl>
 
228
 
 
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>
 
235
</dd></dl>
 
236
 
 
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>
 
245
</dd></dl>
 
246
 
 
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>
 
248
<dl class="method">
 
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>
 
254
methods.</p>
 
255
</dd></dl>
 
256
 
 
257
<dl class="method">
 
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>
 
262
</dd></dl>
 
263
 
 
264
<dl class="method">
 
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>
 
274
</dd></dl>
 
275
 
 
276
<dl class="method">
 
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>
 
283
</dd></dl>
 
284
 
 
285
<dl class="method">
 
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>
 
290
</dd></dl>
 
291
 
 
292
<dl class="method">
 
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
 
296
response.</p>
 
297
</dd></dl>
 
298
 
 
299
<dl class="method">
 
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>
 
305
</dd></dl>
 
306
 
 
307
<dl class="method">
 
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>
 
313
</dd></dl>
 
314
 
 
315
<dl class="method">
 
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>
 
323
</dd></dl>
 
324
 
 
325
<dl class="method">
 
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&#8217;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>
 
330
</dd></dl>
 
331
 
 
332
<dl class="method">
 
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>
 
341
</div>
 
342
</dd></dl>
 
343
 
 
344
<dl class="method">
 
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>
 
348
</dd></dl>
 
349
 
 
350
<dl class="method">
 
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&#8217;s IP address.</p>
 
355
</dd></dl>
 
356
 
 
357
</dd></dl>
 
358
 
 
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&#8217;t run forever, but until some condition is
 
362
fulfilled:</p>
 
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">&quot;&quot;&quot;</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">    &quot;&quot;&quot;</span>
 
370
    <span class="n">server_address</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&#39;</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>
 
374
</pre></div>
 
375
</div>
 
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
 
383
document root.</dd>
 
384
</dl>
 
385
</div>
 
386
</div>
 
387
</div>
 
388
 
 
389
 
 
390
          </div>
 
391
        </div>
 
392
      </div>
 
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>
 
396
  <ul>
 
397
<li><a class="reference internal" href="#">20.18. <code class="docutils literal"><span class="pre">BaseHTTPServer</span></code> &#8212; Basic HTTP server</a><ul>
 
398
<li><a class="reference internal" href="#more-examples">20.18.1. More examples</a></li>
 
399
</ul>
 
400
</li>
 
401
</ul>
 
402
 
 
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> &#8212; A framework for network servers</a></p>
 
406
  <h4>Next topic</h4>
 
407
  <p class="topless"><a href="simplehttpserver.html"
 
408
                        title="next chapter">20.19. <code class="docutils literal"><span class="pre">SimpleHTTPServer</span></code> &#8212; Simple HTTP request handler</a></p>
 
409
<h3>This Page</h3>
 
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>
 
414
</ul>
 
415
 
 
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" />
 
423
    </form>
 
424
    <p class="searchtip" style="font-size: 90%">
 
425
    Enter search terms or a module, class or function name.
 
426
    </p>
 
427
</div>
 
428
<script type="text/javascript">$('#searchbox').show(0);</script>
 
429
        </div>
 
430
      </div>
 
431
      <div class="clearer"></div>
 
432
    </div>  
 
433
    <div class="related" role="navigation" aria-label="related navigation">
 
434
      <h3>Navigation</h3>
 
435
      <ul>
 
436
        <li class="right" style="margin-right: 10px">
 
437
          <a href="../genindex.html" title="General Index"
 
438
             >index</a></li>
 
439
        <li class="right" >
 
440
          <a href="../py-modindex.html" title="Python Module Index"
 
441
             >modules</a> |</li>
 
442
        <li class="right" >
 
443
          <a href="simplehttpserver.html" title="20.19. SimpleHTTPServer — Simple HTTP request handler"
 
444
             >next</a> |</li>
 
445
        <li class="right" >
 
446
          <a href="socketserver.html" title="20.17. SocketServer — A framework for network servers"
 
447
             >previous</a> |</li>
 
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> &raquo;</li>
 
451
        <li>
 
452
          <span class="version_switcher_placeholder">2.7.12</span>
 
453
          <a href="../index.html">Documentation</a> &raquo;
 
454
        </li>
 
455
 
 
456
          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &raquo;</li>
 
457
          <li class="nav-item nav-item-2"><a href="internet.html" >20. Internet Protocols and Support</a> &raquo;</li> 
 
458
      </ul>
 
459
    </div>  
 
460
    <div class="footer">
 
461
    &copy; <a href="../copyright.html">Copyright</a> 1990-2016, Python Software Foundation.
 
462
    <br />
 
463
    The Python Software Foundation is a non-profit corporation.
 
464
    <a href="https://www.python.org/psf/donations/">Please donate.</a>
 
465
    <br />
 
466
    Last updated on Sep 20, 2016.
 
467
    <a href="../bugs.html">Found a bug</a>?
 
468
    <br />
 
469
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.3.3.
 
470
    </div>
 
471
 
 
472
  </body>
 
473
</html>
 
 
b'\\ No newline at end of file'