blob: 35b9355ef4a6f1995af94a86cc68ead50e6d7439 [file] [log] [blame]
Georg Brandl24420152008-05-26 16:32:26 +00001:mod:`http.client` --- HTTP protocol client
2===========================================
Georg Brandl116aa622007-08-15 14:28:22 +00003
Georg Brandl24420152008-05-26 16:32:26 +00004.. module:: http.client
Georg Brandl116aa622007-08-15 14:28:22 +00005 :synopsis: HTTP and HTTPS protocol client (requires sockets).
6
7
8.. index::
9 pair: HTTP; protocol
Georg Brandl24420152008-05-26 16:32:26 +000010 single: HTTP; http.client (standard module)
Georg Brandl116aa622007-08-15 14:28:22 +000011
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000012.. index:: module: urllib.request
Georg Brandl116aa622007-08-15 14:28:22 +000013
Raymond Hettinger469271d2011-01-27 20:38:46 +000014**Source code:** :source:`Lib/http/client.py`
15
16--------------
17
Georg Brandl116aa622007-08-15 14:28:22 +000018This module defines classes which implement the client side of the HTTP and
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000019HTTPS protocols. It is normally not used directly --- the module
Georg Brandl0f7ede42008-06-23 11:23:31 +000020:mod:`urllib.request` uses it to handle URLs that use HTTP and HTTPS.
Georg Brandl116aa622007-08-15 14:28:22 +000021
22.. note::
23
Antoine Pitrou1ab19ca2010-10-13 10:39:21 +000024 HTTPS support is only available if Python was compiled with SSL support
25 (through the :mod:`ssl` module).
Georg Brandl116aa622007-08-15 14:28:22 +000026
Georg Brandl116aa622007-08-15 14:28:22 +000027The module provides the following classes:
28
29
Senthil Kumaran052ddb02013-03-18 14:11:41 -070030.. class:: HTTPConnection(host, port=None[, timeout], \
Ezio Melottie0add762012-09-14 06:32:35 +030031 source_address=None)
Georg Brandl116aa622007-08-15 14:28:22 +000032
33 An :class:`HTTPConnection` instance represents one transaction with an HTTP
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000034 server. It should be instantiated passing it a host and optional port
35 number. If no port number is passed, the port is extracted from the host
36 string if it has the form ``host:port``, else the default HTTP port (80) is
Antoine Pitrou988dbd72010-12-17 17:35:56 +000037 used. If the optional *timeout* parameter is given, blocking
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000038 operations (like connection attempts) will timeout after that many seconds
Georg Brandlf78e02b2008-06-10 17:40:04 +000039 (if it is not given, the global default timeout setting is used).
Raymond Hettinger519c3082011-01-30 00:39:00 +000040 The optional *source_address* parameter may be a tuple of a (host, port)
Gregory P. Smithb4066372010-01-03 03:28:29 +000041 to use as the source address the HTTP connection is made from.
Georg Brandl116aa622007-08-15 14:28:22 +000042
43 For example, the following calls all create instances that connect to the server
44 at the same host and port::
45
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010046 >>> h1 = http.client.HTTPConnection('www.python.org')
47 >>> h2 = http.client.HTTPConnection('www.python.org:80')
48 >>> h3 = http.client.HTTPConnection('www.python.org', 80)
49 >>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
Georg Brandl116aa622007-08-15 14:28:22 +000050
Gregory P. Smithb4066372010-01-03 03:28:29 +000051 .. versionchanged:: 3.2
52 *source_address* was added.
Georg Brandl116aa622007-08-15 14:28:22 +000053
Senthil Kumaranaced69f2013-03-19 01:22:56 -070054 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050055 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
56 not longer supported.
Gregory P. Smithb4066372010-01-03 03:28:29 +000057
Antoine Pitrou988dbd72010-12-17 17:35:56 +000058
Ezio Melottie0add762012-09-14 06:32:35 +030059.. class:: HTTPSConnection(host, port=None, key_file=None, \
Senthil Kumaran052ddb02013-03-18 14:11:41 -070060 cert_file=None[, timeout], \
Ezio Melottie0add762012-09-14 06:32:35 +030061 source_address=None, *, context=None, \
62 check_hostname=None)
Georg Brandl116aa622007-08-15 14:28:22 +000063
64 A subclass of :class:`HTTPConnection` that uses SSL for communication with
Antoine Pitrou803e6d62010-10-13 10:36:15 +000065 secure servers. Default port is ``443``. If *context* is specified, it
66 must be a :class:`ssl.SSLContext` instance describing the various SSL
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010067 options.
Georg Brandl116aa622007-08-15 14:28:22 +000068
Antoine Pitrou803e6d62010-10-13 10:36:15 +000069 *key_file* and *cert_file* are deprecated, please use
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010070 :meth:`ssl.SSLContext.load_cert_chain` instead, or let
71 :func:`ssl.create_default_context` select the system's trusted CA
72 certificates for you.
Antoine Pitrou803e6d62010-10-13 10:36:15 +000073
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010074 Please read :ref:`ssl-security` for more information on best practices.
75
76 .. note::
77 If *context* is specified and has a :attr:`~ssl.SSLContext.verify_mode`
78 of either :data:`~ssl.CERT_OPTIONAL` or :data:`~ssl.CERT_REQUIRED`, then
79 by default *host* is matched against the host name(s) allowed by the
80 server's certificate. If you want to change that behaviour, you can
81 explicitly set *check_hostname* to False.
Georg Brandl116aa622007-08-15 14:28:22 +000082
Gregory P. Smithb4066372010-01-03 03:28:29 +000083 .. versionchanged:: 3.2
Antoine Pitrou803e6d62010-10-13 10:36:15 +000084 *source_address*, *context* and *check_hostname* were added.
Gregory P. Smithb4066372010-01-03 03:28:29 +000085
Antoine Pitroud5323212010-10-22 18:19:07 +000086 .. versionchanged:: 3.2
87 This class now supports HTTPS virtual hosts if possible (that is,
88 if :data:`ssl.HAS_SNI` is true).
89
Senthil Kumaranaced69f2013-03-19 01:22:56 -070090 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050091 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
92 no longer supported.
Georg Brandl116aa622007-08-15 14:28:22 +000093
Benjamin Peterson4ffb0752014-11-03 14:29:33 -050094 .. versionchanged:: 3.4.3
95 This class now performs all the necessary certificate and hostname checks
96 by default. To revert to the previous, unverified, behavior
97 :func:`ssl._create_unverified_context` can be passed to the *context*
98 parameter.
99
Georg Brandl116aa622007-08-15 14:28:22 +0000100
Senthil Kumaran052ddb02013-03-18 14:11:41 -0700101.. class:: HTTPResponse(sock, debuglevel=0, method=None, url=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000102
Jeremy Hylton1052f892009-03-31 14:40:19 +0000103 Class whose instances are returned upon successful connection. Not
104 instantiated directly by user.
Georg Brandl116aa622007-08-15 14:28:22 +0000105
Senthil Kumaranaced69f2013-03-19 01:22:56 -0700106 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -0500107 The *strict* parameter was removed. HTTP 0.9 style "Simple Responses" are
108 no longer supported.
Antoine Pitrou988dbd72010-12-17 17:35:56 +0000109
Georg Brandl116aa622007-08-15 14:28:22 +0000110
111The following exceptions are raised as appropriate:
112
113
114.. exception:: HTTPException
115
116 The base class of the other exceptions in this module. It is a subclass of
117 :exc:`Exception`.
118
Georg Brandl116aa622007-08-15 14:28:22 +0000119
120.. exception:: NotConnected
121
122 A subclass of :exc:`HTTPException`.
123
Georg Brandl116aa622007-08-15 14:28:22 +0000124
125.. exception:: InvalidURL
126
127 A subclass of :exc:`HTTPException`, raised if a port is given and is either
128 non-numeric or empty.
129
Georg Brandl116aa622007-08-15 14:28:22 +0000130
131.. exception:: UnknownProtocol
132
133 A subclass of :exc:`HTTPException`.
134
Georg Brandl116aa622007-08-15 14:28:22 +0000135
136.. exception:: UnknownTransferEncoding
137
138 A subclass of :exc:`HTTPException`.
139
Georg Brandl116aa622007-08-15 14:28:22 +0000140
141.. exception:: UnimplementedFileMode
142
143 A subclass of :exc:`HTTPException`.
144
Georg Brandl116aa622007-08-15 14:28:22 +0000145
146.. exception:: IncompleteRead
147
148 A subclass of :exc:`HTTPException`.
149
Georg Brandl116aa622007-08-15 14:28:22 +0000150
151.. exception:: ImproperConnectionState
152
153 A subclass of :exc:`HTTPException`.
154
Georg Brandl116aa622007-08-15 14:28:22 +0000155
156.. exception:: CannotSendRequest
157
158 A subclass of :exc:`ImproperConnectionState`.
159
Georg Brandl116aa622007-08-15 14:28:22 +0000160
161.. exception:: CannotSendHeader
162
163 A subclass of :exc:`ImproperConnectionState`.
164
Georg Brandl116aa622007-08-15 14:28:22 +0000165
166.. exception:: ResponseNotReady
167
168 A subclass of :exc:`ImproperConnectionState`.
169
Georg Brandl116aa622007-08-15 14:28:22 +0000170
171.. exception:: BadStatusLine
172
173 A subclass of :exc:`HTTPException`. Raised if a server responds with a HTTP
174 status code that we don't understand.
175
Georg Brandl116aa622007-08-15 14:28:22 +0000176
Georg Brandlbf3f8eb2013-10-27 07:34:48 +0100177The constants defined in this module are:
Georg Brandl116aa622007-08-15 14:28:22 +0000178
179.. data:: HTTP_PORT
180
181 The default port for the HTTP protocol (always ``80``).
182
183
184.. data:: HTTPS_PORT
185
186 The default port for the HTTPS protocol (always ``443``).
187
188and also the following constants for integer status codes:
189
190+------------------------------------------+---------+-----------------------------------------------------------------------+
191| Constant | Value | Definition |
192+==========================================+=========+=======================================================================+
193| :const:`CONTINUE` | ``100`` | HTTP/1.1, `RFC 2616, Section |
194| | | 10.1.1 |
195| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.1>`_ |
196+------------------------------------------+---------+-----------------------------------------------------------------------+
197| :const:`SWITCHING_PROTOCOLS` | ``101`` | HTTP/1.1, `RFC 2616, Section |
198| | | 10.1.2 |
199| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.2>`_ |
200+------------------------------------------+---------+-----------------------------------------------------------------------+
201| :const:`PROCESSING` | ``102`` | WEBDAV, `RFC 2518, Section 10.1 |
202| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_102>`_ |
203+------------------------------------------+---------+-----------------------------------------------------------------------+
204| :const:`OK` | ``200`` | HTTP/1.1, `RFC 2616, Section |
205| | | 10.2.1 |
206| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1>`_ |
207+------------------------------------------+---------+-----------------------------------------------------------------------+
208| :const:`CREATED` | ``201`` | HTTP/1.1, `RFC 2616, Section |
209| | | 10.2.2 |
210| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2>`_ |
211+------------------------------------------+---------+-----------------------------------------------------------------------+
212| :const:`ACCEPTED` | ``202`` | HTTP/1.1, `RFC 2616, Section |
213| | | 10.2.3 |
214| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.3>`_ |
215+------------------------------------------+---------+-----------------------------------------------------------------------+
216| :const:`NON_AUTHORITATIVE_INFORMATION` | ``203`` | HTTP/1.1, `RFC 2616, Section |
217| | | 10.2.4 |
218| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.4>`_ |
219+------------------------------------------+---------+-----------------------------------------------------------------------+
220| :const:`NO_CONTENT` | ``204`` | HTTP/1.1, `RFC 2616, Section |
221| | | 10.2.5 |
222| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5>`_ |
223+------------------------------------------+---------+-----------------------------------------------------------------------+
224| :const:`RESET_CONTENT` | ``205`` | HTTP/1.1, `RFC 2616, Section |
225| | | 10.2.6 |
226| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.6>`_ |
227+------------------------------------------+---------+-----------------------------------------------------------------------+
228| :const:`PARTIAL_CONTENT` | ``206`` | HTTP/1.1, `RFC 2616, Section |
229| | | 10.2.7 |
230| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7>`_ |
231+------------------------------------------+---------+-----------------------------------------------------------------------+
232| :const:`MULTI_STATUS` | ``207`` | WEBDAV `RFC 2518, Section 10.2 |
233| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_207>`_ |
234+------------------------------------------+---------+-----------------------------------------------------------------------+
235| :const:`IM_USED` | ``226`` | Delta encoding in HTTP, |
236| | | :rfc:`3229`, Section 10.4.1 |
237+------------------------------------------+---------+-----------------------------------------------------------------------+
238| :const:`MULTIPLE_CHOICES` | ``300`` | HTTP/1.1, `RFC 2616, Section |
239| | | 10.3.1 |
240| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1>`_ |
241+------------------------------------------+---------+-----------------------------------------------------------------------+
242| :const:`MOVED_PERMANENTLY` | ``301`` | HTTP/1.1, `RFC 2616, Section |
243| | | 10.3.2 |
244| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2>`_ |
245+------------------------------------------+---------+-----------------------------------------------------------------------+
246| :const:`FOUND` | ``302`` | HTTP/1.1, `RFC 2616, Section |
247| | | 10.3.3 |
248| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3>`_ |
249+------------------------------------------+---------+-----------------------------------------------------------------------+
250| :const:`SEE_OTHER` | ``303`` | HTTP/1.1, `RFC 2616, Section |
251| | | 10.3.4 |
252| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4>`_ |
253+------------------------------------------+---------+-----------------------------------------------------------------------+
254| :const:`NOT_MODIFIED` | ``304`` | HTTP/1.1, `RFC 2616, Section |
255| | | 10.3.5 |
256| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5>`_ |
257+------------------------------------------+---------+-----------------------------------------------------------------------+
258| :const:`USE_PROXY` | ``305`` | HTTP/1.1, `RFC 2616, Section |
259| | | 10.3.6 |
260| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.6>`_ |
261+------------------------------------------+---------+-----------------------------------------------------------------------+
262| :const:`TEMPORARY_REDIRECT` | ``307`` | HTTP/1.1, `RFC 2616, Section |
263| | | 10.3.8 |
264| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8>`_ |
265+------------------------------------------+---------+-----------------------------------------------------------------------+
266| :const:`BAD_REQUEST` | ``400`` | HTTP/1.1, `RFC 2616, Section |
267| | | 10.4.1 |
268| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1>`_ |
269+------------------------------------------+---------+-----------------------------------------------------------------------+
270| :const:`UNAUTHORIZED` | ``401`` | HTTP/1.1, `RFC 2616, Section |
271| | | 10.4.2 |
272| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2>`_ |
273+------------------------------------------+---------+-----------------------------------------------------------------------+
274| :const:`PAYMENT_REQUIRED` | ``402`` | HTTP/1.1, `RFC 2616, Section |
275| | | 10.4.3 |
276| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.3>`_ |
277+------------------------------------------+---------+-----------------------------------------------------------------------+
278| :const:`FORBIDDEN` | ``403`` | HTTP/1.1, `RFC 2616, Section |
279| | | 10.4.4 |
280| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4>`_ |
281+------------------------------------------+---------+-----------------------------------------------------------------------+
282| :const:`NOT_FOUND` | ``404`` | HTTP/1.1, `RFC 2616, Section |
283| | | 10.4.5 |
284| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5>`_ |
285+------------------------------------------+---------+-----------------------------------------------------------------------+
286| :const:`METHOD_NOT_ALLOWED` | ``405`` | HTTP/1.1, `RFC 2616, Section |
287| | | 10.4.6 |
288| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6>`_ |
289+------------------------------------------+---------+-----------------------------------------------------------------------+
290| :const:`NOT_ACCEPTABLE` | ``406`` | HTTP/1.1, `RFC 2616, Section |
291| | | 10.4.7 |
292| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7>`_ |
293+------------------------------------------+---------+-----------------------------------------------------------------------+
294| :const:`PROXY_AUTHENTICATION_REQUIRED` | ``407`` | HTTP/1.1, `RFC 2616, Section |
295| | | 10.4.8 |
296| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.8>`_ |
297+------------------------------------------+---------+-----------------------------------------------------------------------+
298| :const:`REQUEST_TIMEOUT` | ``408`` | HTTP/1.1, `RFC 2616, Section |
299| | | 10.4.9 |
300| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.9>`_ |
301+------------------------------------------+---------+-----------------------------------------------------------------------+
302| :const:`CONFLICT` | ``409`` | HTTP/1.1, `RFC 2616, Section |
303| | | 10.4.10 |
304| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10>`_ |
305+------------------------------------------+---------+-----------------------------------------------------------------------+
306| :const:`GONE` | ``410`` | HTTP/1.1, `RFC 2616, Section |
307| | | 10.4.11 |
308| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11>`_ |
309+------------------------------------------+---------+-----------------------------------------------------------------------+
310| :const:`LENGTH_REQUIRED` | ``411`` | HTTP/1.1, `RFC 2616, Section |
311| | | 10.4.12 |
312| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.12>`_ |
313+------------------------------------------+---------+-----------------------------------------------------------------------+
314| :const:`PRECONDITION_FAILED` | ``412`` | HTTP/1.1, `RFC 2616, Section |
315| | | 10.4.13 |
316| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.13>`_ |
317+------------------------------------------+---------+-----------------------------------------------------------------------+
318| :const:`REQUEST_ENTITY_TOO_LARGE` | ``413`` | HTTP/1.1, `RFC 2616, Section |
319| | | 10.4.14 |
320| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.14>`_ |
321+------------------------------------------+---------+-----------------------------------------------------------------------+
322| :const:`REQUEST_URI_TOO_LONG` | ``414`` | HTTP/1.1, `RFC 2616, Section |
323| | | 10.4.15 |
324| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.15>`_ |
325+------------------------------------------+---------+-----------------------------------------------------------------------+
326| :const:`UNSUPPORTED_MEDIA_TYPE` | ``415`` | HTTP/1.1, `RFC 2616, Section |
327| | | 10.4.16 |
328| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.16>`_ |
329+------------------------------------------+---------+-----------------------------------------------------------------------+
330| :const:`REQUESTED_RANGE_NOT_SATISFIABLE` | ``416`` | HTTP/1.1, `RFC 2616, Section |
331| | | 10.4.17 |
332| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.17>`_ |
333+------------------------------------------+---------+-----------------------------------------------------------------------+
334| :const:`EXPECTATION_FAILED` | ``417`` | HTTP/1.1, `RFC 2616, Section |
335| | | 10.4.18 |
336| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.18>`_ |
337+------------------------------------------+---------+-----------------------------------------------------------------------+
338| :const:`UNPROCESSABLE_ENTITY` | ``422`` | WEBDAV, `RFC 2518, Section 10.3 |
339| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_422>`_ |
340+------------------------------------------+---------+-----------------------------------------------------------------------+
341| :const:`LOCKED` | ``423`` | WEBDAV `RFC 2518, Section 10.4 |
342| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_423>`_ |
343+------------------------------------------+---------+-----------------------------------------------------------------------+
344| :const:`FAILED_DEPENDENCY` | ``424`` | WEBDAV, `RFC 2518, Section 10.5 |
345| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_424>`_ |
346+------------------------------------------+---------+-----------------------------------------------------------------------+
347| :const:`UPGRADE_REQUIRED` | ``426`` | HTTP Upgrade to TLS, |
348| | | :rfc:`2817`, Section 6 |
349+------------------------------------------+---------+-----------------------------------------------------------------------+
Hynek Schlawack51b2ed52012-05-16 09:51:07 +0200350| :const:`PRECONDITION_REQUIRED` | ``428`` | Additional HTTP Status Codes, |
351| | | :rfc:`6585`, Section 3 |
352+------------------------------------------+---------+-----------------------------------------------------------------------+
353| :const:`TOO_MANY_REQUESTS` | ``429`` | Additional HTTP Status Codes, |
354| | | :rfc:`6585`, Section 4 |
355+------------------------------------------+---------+-----------------------------------------------------------------------+
356| :const:`REQUEST_HEADER_FIELDS_TOO_LARGE` | ``431`` | Additional HTTP Status Codes, |
357| | | :rfc:`6585`, Section 5 |
358+------------------------------------------+---------+-----------------------------------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000359| :const:`INTERNAL_SERVER_ERROR` | ``500`` | HTTP/1.1, `RFC 2616, Section |
360| | | 10.5.1 |
361| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1>`_ |
362+------------------------------------------+---------+-----------------------------------------------------------------------+
363| :const:`NOT_IMPLEMENTED` | ``501`` | HTTP/1.1, `RFC 2616, Section |
364| | | 10.5.2 |
365| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2>`_ |
366+------------------------------------------+---------+-----------------------------------------------------------------------+
367| :const:`BAD_GATEWAY` | ``502`` | HTTP/1.1 `RFC 2616, Section |
368| | | 10.5.3 |
369| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3>`_ |
370+------------------------------------------+---------+-----------------------------------------------------------------------+
371| :const:`SERVICE_UNAVAILABLE` | ``503`` | HTTP/1.1, `RFC 2616, Section |
372| | | 10.5.4 |
373| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4>`_ |
374+------------------------------------------+---------+-----------------------------------------------------------------------+
375| :const:`GATEWAY_TIMEOUT` | ``504`` | HTTP/1.1 `RFC 2616, Section |
376| | | 10.5.5 |
377| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5>`_ |
378+------------------------------------------+---------+-----------------------------------------------------------------------+
379| :const:`HTTP_VERSION_NOT_SUPPORTED` | ``505`` | HTTP/1.1, `RFC 2616, Section |
380| | | 10.5.6 |
381| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.6>`_ |
382+------------------------------------------+---------+-----------------------------------------------------------------------+
383| :const:`INSUFFICIENT_STORAGE` | ``507`` | WEBDAV, `RFC 2518, Section 10.6 |
384| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_507>`_ |
385+------------------------------------------+---------+-----------------------------------------------------------------------+
386| :const:`NOT_EXTENDED` | ``510`` | An HTTP Extension Framework, |
387| | | :rfc:`2774`, Section 7 |
388+------------------------------------------+---------+-----------------------------------------------------------------------+
Hynek Schlawack51b2ed52012-05-16 09:51:07 +0200389| :const:`NETWORK_AUTHENTICATION_REQUIRED` | ``511`` | Additional HTTP Status Codes, |
390| | | :rfc:`6585`, Section 6 |
391+------------------------------------------+---------+-----------------------------------------------------------------------+
392
Georg Brandl945a3ad2012-05-21 20:28:58 +0200393.. versionchanged:: 3.3
394 Added codes ``428``, ``429``, ``431`` and ``511`` from :rfc:`6585`.
Georg Brandl116aa622007-08-15 14:28:22 +0000395
396
397.. data:: responses
398
399 This dictionary maps the HTTP 1.1 status codes to the W3C names.
400
Georg Brandl24420152008-05-26 16:32:26 +0000401 Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
Georg Brandl116aa622007-08-15 14:28:22 +0000402
Georg Brandl116aa622007-08-15 14:28:22 +0000403
404.. _httpconnection-objects:
405
406HTTPConnection Objects
407----------------------
408
409:class:`HTTPConnection` instances have the following methods:
410
411
Georg Brandl036490d2009-05-17 13:00:36 +0000412.. method:: HTTPConnection.request(method, url, body=None, headers={})
Georg Brandl116aa622007-08-15 14:28:22 +0000413
Jeremy Hylton236654b2009-03-27 20:24:34 +0000414 This will send a request to the server using the HTTP request
415 method *method* and the selector *url*. If the *body* argument is
416 present, it should be string or bytes object of data to send after
417 the headers are finished. Strings are encoded as ISO-8859-1, the
418 default charset for HTTP. To use other encodings, pass a bytes
419 object. The Content-Length header is set to the length of the
420 string.
Georg Brandl116aa622007-08-15 14:28:22 +0000421
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000422 The *body* may also be an open :term:`file object`, in which case the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000423 contents of the file is sent; this file object should support ``fileno()``
424 and ``read()`` methods. The header Content-Length is automatically set to
425 the length of the file as reported by stat. The *body* argument may also be
Raymond Hettinger519c3082011-01-30 00:39:00 +0000426 an iterable and Content-Length header should be explicitly provided when the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000427 body is an iterable.
Jeremy Hylton236654b2009-03-27 20:24:34 +0000428
429 The *headers* argument should be a mapping of extra HTTP
430 headers to send with the request.
Georg Brandl116aa622007-08-15 14:28:22 +0000431
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000432 .. versionadded:: 3.2
Georg Brandl09a7df82010-12-19 12:33:52 +0000433 *body* can now be an iterable.
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000434
Georg Brandl116aa622007-08-15 14:28:22 +0000435.. method:: HTTPConnection.getresponse()
436
437 Should be called after a request is sent to get the response from the server.
438 Returns an :class:`HTTPResponse` instance.
439
440 .. note::
441
442 Note that you must have read the whole response before you can send a new
443 request to the server.
444
445
446.. method:: HTTPConnection.set_debuglevel(level)
447
R. David Murrayd89bc3f2010-12-15 02:19:14 +0000448 Set the debugging level. The default debug level is ``0``, meaning no
449 debugging output is printed. Any value greater than ``0`` will cause all
450 currently defined debug output to be printed to stdout. The ``debuglevel``
451 is passed to any new :class:`HTTPResponse` objects that are created.
Georg Brandl116aa622007-08-15 14:28:22 +0000452
Mark Dickinson574b1d62009-10-01 20:20:09 +0000453 .. versionadded:: 3.1
Benjamin Petersonfa0d7032009-06-01 22:42:33 +0000454
Georg Brandl67b21b72010-08-17 15:07:14 +0000455
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000456.. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000457
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500458 Set the host and the port for HTTP Connect Tunnelling. This allows running
459 the connection through a proxy server.
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000460
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500461 The host and port arguments specify the endpoint of the tunneled connection
462 (i.e. the address included in the CONNECT request, *not* the address of the
463 proxy server).
464
465 The headers argument should be a mapping of extra HTTP headers to send with
466 the CONNECT request.
467
468 For example, to tunnel through a HTTPS proxy server running locally on port
469 8080, we would pass the address of the proxy to the :class:`HTTPSConnection`
470 constructor, and the address of the host that we eventually want to reach to
471 the :meth:`~HTTPConnection.set_tunnel` method::
472
473 >>> import http.client
474 >>> conn = http.client.HTTPSConnection("localhost", 8080)
475 >>> conn.set_tunnel("www.python.org")
476 >>> conn.request("HEAD","/index.html")
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000477
Senthil Kumaran2e910fd2009-07-25 04:27:38 +0000478 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000479
Georg Brandl67b21b72010-08-17 15:07:14 +0000480
Georg Brandl116aa622007-08-15 14:28:22 +0000481.. method:: HTTPConnection.connect()
482
483 Connect to the server specified when the object was created.
484
485
486.. method:: HTTPConnection.close()
487
488 Close the connection to the server.
489
490As an alternative to using the :meth:`request` method described above, you can
491also send your request step by step, by using the four functions below.
492
493
Georg Brandl036490d2009-05-17 13:00:36 +0000494.. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000495
496 This should be the first call after the connection to the server has been made.
497 It sends a line to the server consisting of the *request* string, the *selector*
498 string, and the HTTP version (``HTTP/1.1``). To disable automatic sending of
499 ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional
500 content encodings), specify *skip_host* or *skip_accept_encoding* with non-False
501 values.
502
Georg Brandl116aa622007-08-15 14:28:22 +0000503
504.. method:: HTTPConnection.putheader(header, argument[, ...])
505
506 Send an :rfc:`822`\ -style header to the server. It sends a line to the server
507 consisting of the header, a colon and a space, and the first argument. If more
508 arguments are given, continuation lines are sent, each consisting of a tab and
509 an argument.
510
511
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800512.. method:: HTTPConnection.endheaders(message_body=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000513
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800514 Send a blank line to the server, signalling the end of the headers. The
Senthil Kumaranad87fa62011-10-05 23:26:49 +0800515 optional *message_body* argument can be used to pass a message body
516 associated with the request. The message body will be sent in the same
517 packet as the message headers if it is string, otherwise it is sent in a
518 separate packet.
Georg Brandl116aa622007-08-15 14:28:22 +0000519
520.. method:: HTTPConnection.send(data)
521
522 Send data to the server. This should be used directly only after the
523 :meth:`endheaders` method has been called and before :meth:`getresponse` is
524 called.
525
526
527.. _httpresponse-objects:
528
529HTTPResponse Objects
530--------------------
531
Jeremy Hylton1052f892009-03-31 14:40:19 +0000532An :class:`HTTPResponse` instance wraps the HTTP response from the
533server. It provides access to the request headers and the entity
534body. The response is an iterable object and can be used in a with
535statement.
Georg Brandl116aa622007-08-15 14:28:22 +0000536
537
538.. method:: HTTPResponse.read([amt])
539
540 Reads and returns the response body, or up to the next *amt* bytes.
541
Antoine Pitrou38d96432011-12-06 22:33:57 +0100542.. method:: HTTPResponse.readinto(b)
543
544 Reads up to the next len(b) bytes of the response body into the buffer *b*.
545 Returns the number of bytes read.
546
547 .. versionadded:: 3.3
Georg Brandl116aa622007-08-15 14:28:22 +0000548
Georg Brandl036490d2009-05-17 13:00:36 +0000549.. method:: HTTPResponse.getheader(name, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000550
Senthil Kumaran790f8312010-08-02 17:09:02 +0000551 Return the value of the header *name*, or *default* if there is no header
552 matching *name*. If there is more than one header with the name *name*,
553 return all of the values joined by ', '. If 'default' is any iterable other
554 than a single string, its elements are similarly returned joined by commas.
Georg Brandl116aa622007-08-15 14:28:22 +0000555
556
557.. method:: HTTPResponse.getheaders()
558
559 Return a list of (header, value) tuples.
560
Senthil Kumaranceff5662010-09-21 01:57:43 +0000561.. method:: HTTPResponse.fileno()
562
563 Return the ``fileno`` of the underlying socket.
Georg Brandl116aa622007-08-15 14:28:22 +0000564
565.. attribute:: HTTPResponse.msg
566
Jeremy Hylton1052f892009-03-31 14:40:19 +0000567 A :class:`http.client.HTTPMessage` instance containing the response
568 headers. :class:`http.client.HTTPMessage` is a subclass of
569 :class:`email.message.Message`.
Georg Brandl116aa622007-08-15 14:28:22 +0000570
571
572.. attribute:: HTTPResponse.version
573
574 HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
575
576
577.. attribute:: HTTPResponse.status
578
579 Status code returned by server.
580
581
582.. attribute:: HTTPResponse.reason
583
584 Reason phrase returned by server.
585
586
Jeremy Hylton1052f892009-03-31 14:40:19 +0000587.. attribute:: HTTPResponse.debuglevel
588
Georg Brandlef871f62010-03-12 10:06:40 +0000589 A debugging hook. If :attr:`debuglevel` is greater than zero, messages
Jeremy Hylton1052f892009-03-31 14:40:19 +0000590 will be printed to stdout as the response is read and parsed.
591
Senthil Kumarance9b5962011-06-19 16:56:49 -0700592.. attribute:: HTTPResponse.closed
593
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200594 Is ``True`` if the stream is closed.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000595
Georg Brandl116aa622007-08-15 14:28:22 +0000596Examples
597--------
598
599Here is an example session that uses the ``GET`` method::
600
Georg Brandl24420152008-05-26 16:32:26 +0000601 >>> import http.client
602 >>> conn = http.client.HTTPConnection("www.python.org")
Georg Brandl116aa622007-08-15 14:28:22 +0000603 >>> conn.request("GET", "/index.html")
604 >>> r1 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000605 >>> print(r1.status, r1.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000606 200 OK
Senthil Kumarance9b5962011-06-19 16:56:49 -0700607 >>> data1 = r1.read() # This will return entire content.
608 >>> # The following example demonstrates reading data in chunks.
609 >>> conn.request("GET", "/index.html")
610 >>> r1 = conn.getresponse()
611 >>> while not r1.closed:
612 ... print(r1.read(200)) # 200 bytes
613 b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
614 ...
615 >>> # Example of an invalid request
Georg Brandl116aa622007-08-15 14:28:22 +0000616 >>> conn.request("GET", "/parrot.spam")
617 >>> r2 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000618 >>> print(r2.status, r2.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000619 404 Not Found
620 >>> data2 = r2.read()
621 >>> conn.close()
622
Fred Drake1587e3d2010-05-12 01:36:11 +0000623Here is an example session that uses the ``HEAD`` method. Note that the
624``HEAD`` method never returns any data. ::
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000625
626 >>> import http.client
627 >>> conn = http.client.HTTPConnection("www.python.org")
628 >>> conn.request("HEAD","/index.html")
629 >>> res = conn.getresponse()
630 >>> print(res.status, res.reason)
631 200 OK
632 >>> data = res.read()
633 >>> print(len(data))
634 0
635 >>> data == b''
636 True
637
Georg Brandl116aa622007-08-15 14:28:22 +0000638Here is an example session that shows how to ``POST`` requests::
639
Senthil Kumaranaca8fd72008-06-23 04:41:59 +0000640 >>> import http.client, urllib.parse
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800641 >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
Georg Brandl116aa622007-08-15 14:28:22 +0000642 >>> headers = {"Content-type": "application/x-www-form-urlencoded",
643 ... "Accept": "text/plain"}
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800644 >>> conn = http.client.HTTPConnection("bugs.python.org")
645 >>> conn.request("POST", "", params, headers)
Georg Brandl116aa622007-08-15 14:28:22 +0000646 >>> response = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000647 >>> print(response.status, response.reason)
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800648 302 Found
Georg Brandl116aa622007-08-15 14:28:22 +0000649 >>> data = response.read()
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800650 >>> data
651 b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
Georg Brandl116aa622007-08-15 14:28:22 +0000652 >>> conn.close()
653
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700654Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The
655difference lies only the server side where HTTP server will allow resources to
Senthil Kumarane66cc812013-03-13 13:42:47 -0700656be created via ``PUT`` request. It should be noted that custom HTTP methods
657+are also handled in :class:`urllib.request.Request` by sending the appropriate
658+method attribute.Here is an example session that shows how to do ``PUT``
659request using http.client::
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700660
661 >>> # This creates an HTTP message
662 >>> # with the content of BODY as the enclosed representation
Senthil Kumaran8b4a2722014-04-16 23:33:02 -0400663 >>> # for the resource http://localhost:8080/file
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700664 ...
665 >>> import http.client
666 >>> BODY = "***filecontents***"
667 >>> conn = http.client.HTTPConnection("localhost", 8080)
668 >>> conn.request("PUT", "/file", BODY)
669 >>> response = conn.getresponse()
Georg Brandld277a562013-10-06 12:42:18 +0200670 >>> print(response.status, response.reason)
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700671 200, OK
Jeremy Hylton1052f892009-03-31 14:40:19 +0000672
673.. _httpmessage-objects:
674
675HTTPMessage Objects
676-------------------
677
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000678An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
679response. It is implemented using the :class:`email.message.Message` class.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000680
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000681.. XXX Define the methods that clients can depend upon between versions.