blob: 94f7b139b0732ea60a6343a1d6a5abcb41dd4932 [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
Benjamin Petersona090f012014-12-07 13:18:25 -050072 certificates for you. The *check_hostname* parameter is also deprecated; the
73 :attr:`SSLContext.check_hostname` attribute of *context* should be used
74 instead.
Antoine Pitrou803e6d62010-10-13 10:36:15 +000075
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010076 Please read :ref:`ssl-security` for more information on best practices.
77
Gregory P. Smithb4066372010-01-03 03:28:29 +000078 .. versionchanged:: 3.2
Antoine Pitrou803e6d62010-10-13 10:36:15 +000079 *source_address*, *context* and *check_hostname* were added.
Gregory P. Smithb4066372010-01-03 03:28:29 +000080
Antoine Pitroud5323212010-10-22 18:19:07 +000081 .. versionchanged:: 3.2
82 This class now supports HTTPS virtual hosts if possible (that is,
83 if :data:`ssl.HAS_SNI` is true).
84
Senthil Kumaranaced69f2013-03-19 01:22:56 -070085 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050086 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
87 no longer supported.
Georg Brandl116aa622007-08-15 14:28:22 +000088
Benjamin Peterson4ffb0752014-11-03 14:29:33 -050089 .. versionchanged:: 3.4.3
90 This class now performs all the necessary certificate and hostname checks
91 by default. To revert to the previous, unverified, behavior
92 :func:`ssl._create_unverified_context` can be passed to the *context*
93 parameter.
94
Georg Brandl116aa622007-08-15 14:28:22 +000095
Senthil Kumaran052ddb02013-03-18 14:11:41 -070096.. class:: HTTPResponse(sock, debuglevel=0, method=None, url=None)
Georg Brandl116aa622007-08-15 14:28:22 +000097
Jeremy Hylton1052f892009-03-31 14:40:19 +000098 Class whose instances are returned upon successful connection. Not
99 instantiated directly by user.
Georg Brandl116aa622007-08-15 14:28:22 +0000100
Senthil Kumaranaced69f2013-03-19 01:22:56 -0700101 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -0500102 The *strict* parameter was removed. HTTP 0.9 style "Simple Responses" are
103 no longer supported.
Antoine Pitrou988dbd72010-12-17 17:35:56 +0000104
Georg Brandl116aa622007-08-15 14:28:22 +0000105
106The following exceptions are raised as appropriate:
107
108
109.. exception:: HTTPException
110
111 The base class of the other exceptions in this module. It is a subclass of
112 :exc:`Exception`.
113
Georg Brandl116aa622007-08-15 14:28:22 +0000114
115.. exception:: NotConnected
116
117 A subclass of :exc:`HTTPException`.
118
Georg Brandl116aa622007-08-15 14:28:22 +0000119
120.. exception:: InvalidURL
121
122 A subclass of :exc:`HTTPException`, raised if a port is given and is either
123 non-numeric or empty.
124
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126.. exception:: UnknownProtocol
127
128 A subclass of :exc:`HTTPException`.
129
Georg Brandl116aa622007-08-15 14:28:22 +0000130
131.. exception:: UnknownTransferEncoding
132
133 A subclass of :exc:`HTTPException`.
134
Georg Brandl116aa622007-08-15 14:28:22 +0000135
136.. exception:: UnimplementedFileMode
137
138 A subclass of :exc:`HTTPException`.
139
Georg Brandl116aa622007-08-15 14:28:22 +0000140
141.. exception:: IncompleteRead
142
143 A subclass of :exc:`HTTPException`.
144
Georg Brandl116aa622007-08-15 14:28:22 +0000145
146.. exception:: ImproperConnectionState
147
148 A subclass of :exc:`HTTPException`.
149
Georg Brandl116aa622007-08-15 14:28:22 +0000150
151.. exception:: CannotSendRequest
152
153 A subclass of :exc:`ImproperConnectionState`.
154
Georg Brandl116aa622007-08-15 14:28:22 +0000155
156.. exception:: CannotSendHeader
157
158 A subclass of :exc:`ImproperConnectionState`.
159
Georg Brandl116aa622007-08-15 14:28:22 +0000160
161.. exception:: ResponseNotReady
162
163 A subclass of :exc:`ImproperConnectionState`.
164
Georg Brandl116aa622007-08-15 14:28:22 +0000165
166.. exception:: BadStatusLine
167
168 A subclass of :exc:`HTTPException`. Raised if a server responds with a HTTP
169 status code that we don't understand.
170
Georg Brandl116aa622007-08-15 14:28:22 +0000171
Georg Brandlbf3f8eb2013-10-27 07:34:48 +0100172The constants defined in this module are:
Georg Brandl116aa622007-08-15 14:28:22 +0000173
174.. data:: HTTP_PORT
175
176 The default port for the HTTP protocol (always ``80``).
177
178
179.. data:: HTTPS_PORT
180
181 The default port for the HTTPS protocol (always ``443``).
182
183and also the following constants for integer status codes:
184
185+------------------------------------------+---------+-----------------------------------------------------------------------+
186| Constant | Value | Definition |
187+==========================================+=========+=======================================================================+
188| :const:`CONTINUE` | ``100`` | HTTP/1.1, `RFC 2616, Section |
189| | | 10.1.1 |
190| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.1>`_ |
191+------------------------------------------+---------+-----------------------------------------------------------------------+
192| :const:`SWITCHING_PROTOCOLS` | ``101`` | HTTP/1.1, `RFC 2616, Section |
193| | | 10.1.2 |
194| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.2>`_ |
195+------------------------------------------+---------+-----------------------------------------------------------------------+
196| :const:`PROCESSING` | ``102`` | WEBDAV, `RFC 2518, Section 10.1 |
197| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_102>`_ |
198+------------------------------------------+---------+-----------------------------------------------------------------------+
199| :const:`OK` | ``200`` | HTTP/1.1, `RFC 2616, Section |
200| | | 10.2.1 |
201| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1>`_ |
202+------------------------------------------+---------+-----------------------------------------------------------------------+
203| :const:`CREATED` | ``201`` | HTTP/1.1, `RFC 2616, Section |
204| | | 10.2.2 |
205| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2>`_ |
206+------------------------------------------+---------+-----------------------------------------------------------------------+
207| :const:`ACCEPTED` | ``202`` | HTTP/1.1, `RFC 2616, Section |
208| | | 10.2.3 |
209| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.3>`_ |
210+------------------------------------------+---------+-----------------------------------------------------------------------+
211| :const:`NON_AUTHORITATIVE_INFORMATION` | ``203`` | HTTP/1.1, `RFC 2616, Section |
212| | | 10.2.4 |
213| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.4>`_ |
214+------------------------------------------+---------+-----------------------------------------------------------------------+
215| :const:`NO_CONTENT` | ``204`` | HTTP/1.1, `RFC 2616, Section |
216| | | 10.2.5 |
217| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5>`_ |
218+------------------------------------------+---------+-----------------------------------------------------------------------+
219| :const:`RESET_CONTENT` | ``205`` | HTTP/1.1, `RFC 2616, Section |
220| | | 10.2.6 |
221| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.6>`_ |
222+------------------------------------------+---------+-----------------------------------------------------------------------+
223| :const:`PARTIAL_CONTENT` | ``206`` | HTTP/1.1, `RFC 2616, Section |
224| | | 10.2.7 |
225| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7>`_ |
226+------------------------------------------+---------+-----------------------------------------------------------------------+
227| :const:`MULTI_STATUS` | ``207`` | WEBDAV `RFC 2518, Section 10.2 |
228| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_207>`_ |
229+------------------------------------------+---------+-----------------------------------------------------------------------+
230| :const:`IM_USED` | ``226`` | Delta encoding in HTTP, |
231| | | :rfc:`3229`, Section 10.4.1 |
232+------------------------------------------+---------+-----------------------------------------------------------------------+
233| :const:`MULTIPLE_CHOICES` | ``300`` | HTTP/1.1, `RFC 2616, Section |
234| | | 10.3.1 |
235| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1>`_ |
236+------------------------------------------+---------+-----------------------------------------------------------------------+
237| :const:`MOVED_PERMANENTLY` | ``301`` | HTTP/1.1, `RFC 2616, Section |
238| | | 10.3.2 |
239| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2>`_ |
240+------------------------------------------+---------+-----------------------------------------------------------------------+
241| :const:`FOUND` | ``302`` | HTTP/1.1, `RFC 2616, Section |
242| | | 10.3.3 |
243| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3>`_ |
244+------------------------------------------+---------+-----------------------------------------------------------------------+
245| :const:`SEE_OTHER` | ``303`` | HTTP/1.1, `RFC 2616, Section |
246| | | 10.3.4 |
247| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4>`_ |
248+------------------------------------------+---------+-----------------------------------------------------------------------+
249| :const:`NOT_MODIFIED` | ``304`` | HTTP/1.1, `RFC 2616, Section |
250| | | 10.3.5 |
251| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5>`_ |
252+------------------------------------------+---------+-----------------------------------------------------------------------+
253| :const:`USE_PROXY` | ``305`` | HTTP/1.1, `RFC 2616, Section |
254| | | 10.3.6 |
255| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.6>`_ |
256+------------------------------------------+---------+-----------------------------------------------------------------------+
257| :const:`TEMPORARY_REDIRECT` | ``307`` | HTTP/1.1, `RFC 2616, Section |
258| | | 10.3.8 |
259| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8>`_ |
260+------------------------------------------+---------+-----------------------------------------------------------------------+
261| :const:`BAD_REQUEST` | ``400`` | HTTP/1.1, `RFC 2616, Section |
262| | | 10.4.1 |
263| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1>`_ |
264+------------------------------------------+---------+-----------------------------------------------------------------------+
265| :const:`UNAUTHORIZED` | ``401`` | HTTP/1.1, `RFC 2616, Section |
266| | | 10.4.2 |
267| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2>`_ |
268+------------------------------------------+---------+-----------------------------------------------------------------------+
269| :const:`PAYMENT_REQUIRED` | ``402`` | HTTP/1.1, `RFC 2616, Section |
270| | | 10.4.3 |
271| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.3>`_ |
272+------------------------------------------+---------+-----------------------------------------------------------------------+
273| :const:`FORBIDDEN` | ``403`` | HTTP/1.1, `RFC 2616, Section |
274| | | 10.4.4 |
275| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4>`_ |
276+------------------------------------------+---------+-----------------------------------------------------------------------+
277| :const:`NOT_FOUND` | ``404`` | HTTP/1.1, `RFC 2616, Section |
278| | | 10.4.5 |
279| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5>`_ |
280+------------------------------------------+---------+-----------------------------------------------------------------------+
281| :const:`METHOD_NOT_ALLOWED` | ``405`` | HTTP/1.1, `RFC 2616, Section |
282| | | 10.4.6 |
283| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6>`_ |
284+------------------------------------------+---------+-----------------------------------------------------------------------+
285| :const:`NOT_ACCEPTABLE` | ``406`` | HTTP/1.1, `RFC 2616, Section |
286| | | 10.4.7 |
287| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7>`_ |
288+------------------------------------------+---------+-----------------------------------------------------------------------+
289| :const:`PROXY_AUTHENTICATION_REQUIRED` | ``407`` | HTTP/1.1, `RFC 2616, Section |
290| | | 10.4.8 |
291| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.8>`_ |
292+------------------------------------------+---------+-----------------------------------------------------------------------+
293| :const:`REQUEST_TIMEOUT` | ``408`` | HTTP/1.1, `RFC 2616, Section |
294| | | 10.4.9 |
295| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.9>`_ |
296+------------------------------------------+---------+-----------------------------------------------------------------------+
297| :const:`CONFLICT` | ``409`` | HTTP/1.1, `RFC 2616, Section |
298| | | 10.4.10 |
299| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10>`_ |
300+------------------------------------------+---------+-----------------------------------------------------------------------+
301| :const:`GONE` | ``410`` | HTTP/1.1, `RFC 2616, Section |
302| | | 10.4.11 |
303| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11>`_ |
304+------------------------------------------+---------+-----------------------------------------------------------------------+
305| :const:`LENGTH_REQUIRED` | ``411`` | HTTP/1.1, `RFC 2616, Section |
306| | | 10.4.12 |
307| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.12>`_ |
308+------------------------------------------+---------+-----------------------------------------------------------------------+
309| :const:`PRECONDITION_FAILED` | ``412`` | HTTP/1.1, `RFC 2616, Section |
310| | | 10.4.13 |
311| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.13>`_ |
312+------------------------------------------+---------+-----------------------------------------------------------------------+
313| :const:`REQUEST_ENTITY_TOO_LARGE` | ``413`` | HTTP/1.1, `RFC 2616, Section |
314| | | 10.4.14 |
315| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.14>`_ |
316+------------------------------------------+---------+-----------------------------------------------------------------------+
317| :const:`REQUEST_URI_TOO_LONG` | ``414`` | HTTP/1.1, `RFC 2616, Section |
318| | | 10.4.15 |
319| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.15>`_ |
320+------------------------------------------+---------+-----------------------------------------------------------------------+
321| :const:`UNSUPPORTED_MEDIA_TYPE` | ``415`` | HTTP/1.1, `RFC 2616, Section |
322| | | 10.4.16 |
323| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.16>`_ |
324+------------------------------------------+---------+-----------------------------------------------------------------------+
325| :const:`REQUESTED_RANGE_NOT_SATISFIABLE` | ``416`` | HTTP/1.1, `RFC 2616, Section |
326| | | 10.4.17 |
327| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.17>`_ |
328+------------------------------------------+---------+-----------------------------------------------------------------------+
329| :const:`EXPECTATION_FAILED` | ``417`` | HTTP/1.1, `RFC 2616, Section |
330| | | 10.4.18 |
331| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.18>`_ |
332+------------------------------------------+---------+-----------------------------------------------------------------------+
333| :const:`UNPROCESSABLE_ENTITY` | ``422`` | WEBDAV, `RFC 2518, Section 10.3 |
334| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_422>`_ |
335+------------------------------------------+---------+-----------------------------------------------------------------------+
336| :const:`LOCKED` | ``423`` | WEBDAV `RFC 2518, Section 10.4 |
337| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_423>`_ |
338+------------------------------------------+---------+-----------------------------------------------------------------------+
339| :const:`FAILED_DEPENDENCY` | ``424`` | WEBDAV, `RFC 2518, Section 10.5 |
340| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_424>`_ |
341+------------------------------------------+---------+-----------------------------------------------------------------------+
342| :const:`UPGRADE_REQUIRED` | ``426`` | HTTP Upgrade to TLS, |
343| | | :rfc:`2817`, Section 6 |
344+------------------------------------------+---------+-----------------------------------------------------------------------+
Hynek Schlawack51b2ed52012-05-16 09:51:07 +0200345| :const:`PRECONDITION_REQUIRED` | ``428`` | Additional HTTP Status Codes, |
346| | | :rfc:`6585`, Section 3 |
347+------------------------------------------+---------+-----------------------------------------------------------------------+
348| :const:`TOO_MANY_REQUESTS` | ``429`` | Additional HTTP Status Codes, |
349| | | :rfc:`6585`, Section 4 |
350+------------------------------------------+---------+-----------------------------------------------------------------------+
351| :const:`REQUEST_HEADER_FIELDS_TOO_LARGE` | ``431`` | Additional HTTP Status Codes, |
352| | | :rfc:`6585`, Section 5 |
353+------------------------------------------+---------+-----------------------------------------------------------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000354| :const:`INTERNAL_SERVER_ERROR` | ``500`` | HTTP/1.1, `RFC 2616, Section |
355| | | 10.5.1 |
356| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1>`_ |
357+------------------------------------------+---------+-----------------------------------------------------------------------+
358| :const:`NOT_IMPLEMENTED` | ``501`` | HTTP/1.1, `RFC 2616, Section |
359| | | 10.5.2 |
360| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2>`_ |
361+------------------------------------------+---------+-----------------------------------------------------------------------+
362| :const:`BAD_GATEWAY` | ``502`` | HTTP/1.1 `RFC 2616, Section |
363| | | 10.5.3 |
364| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3>`_ |
365+------------------------------------------+---------+-----------------------------------------------------------------------+
366| :const:`SERVICE_UNAVAILABLE` | ``503`` | HTTP/1.1, `RFC 2616, Section |
367| | | 10.5.4 |
368| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4>`_ |
369+------------------------------------------+---------+-----------------------------------------------------------------------+
370| :const:`GATEWAY_TIMEOUT` | ``504`` | HTTP/1.1 `RFC 2616, Section |
371| | | 10.5.5 |
372| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5>`_ |
373+------------------------------------------+---------+-----------------------------------------------------------------------+
374| :const:`HTTP_VERSION_NOT_SUPPORTED` | ``505`` | HTTP/1.1, `RFC 2616, Section |
375| | | 10.5.6 |
376| | | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.6>`_ |
377+------------------------------------------+---------+-----------------------------------------------------------------------+
378| :const:`INSUFFICIENT_STORAGE` | ``507`` | WEBDAV, `RFC 2518, Section 10.6 |
379| | | <http://www.webdav.org/specs/rfc2518.html#STATUS_507>`_ |
380+------------------------------------------+---------+-----------------------------------------------------------------------+
381| :const:`NOT_EXTENDED` | ``510`` | An HTTP Extension Framework, |
382| | | :rfc:`2774`, Section 7 |
383+------------------------------------------+---------+-----------------------------------------------------------------------+
Hynek Schlawack51b2ed52012-05-16 09:51:07 +0200384| :const:`NETWORK_AUTHENTICATION_REQUIRED` | ``511`` | Additional HTTP Status Codes, |
385| | | :rfc:`6585`, Section 6 |
386+------------------------------------------+---------+-----------------------------------------------------------------------+
387
Georg Brandl945a3ad2012-05-21 20:28:58 +0200388.. versionchanged:: 3.3
389 Added codes ``428``, ``429``, ``431`` and ``511`` from :rfc:`6585`.
Georg Brandl116aa622007-08-15 14:28:22 +0000390
391
392.. data:: responses
393
394 This dictionary maps the HTTP 1.1 status codes to the W3C names.
395
Georg Brandl24420152008-05-26 16:32:26 +0000396 Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
Georg Brandl116aa622007-08-15 14:28:22 +0000397
Georg Brandl116aa622007-08-15 14:28:22 +0000398
399.. _httpconnection-objects:
400
401HTTPConnection Objects
402----------------------
403
404:class:`HTTPConnection` instances have the following methods:
405
406
Georg Brandl036490d2009-05-17 13:00:36 +0000407.. method:: HTTPConnection.request(method, url, body=None, headers={})
Georg Brandl116aa622007-08-15 14:28:22 +0000408
Jeremy Hylton236654b2009-03-27 20:24:34 +0000409 This will send a request to the server using the HTTP request
410 method *method* and the selector *url*. If the *body* argument is
411 present, it should be string or bytes object of data to send after
412 the headers are finished. Strings are encoded as ISO-8859-1, the
413 default charset for HTTP. To use other encodings, pass a bytes
414 object. The Content-Length header is set to the length of the
415 string.
Georg Brandl116aa622007-08-15 14:28:22 +0000416
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000417 The *body* may also be an open :term:`file object`, in which case the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000418 contents of the file is sent; this file object should support ``fileno()``
419 and ``read()`` methods. The header Content-Length is automatically set to
420 the length of the file as reported by stat. The *body* argument may also be
Raymond Hettinger519c3082011-01-30 00:39:00 +0000421 an iterable and Content-Length header should be explicitly provided when the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000422 body is an iterable.
Jeremy Hylton236654b2009-03-27 20:24:34 +0000423
424 The *headers* argument should be a mapping of extra HTTP
425 headers to send with the request.
Georg Brandl116aa622007-08-15 14:28:22 +0000426
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000427 .. versionadded:: 3.2
Georg Brandl09a7df82010-12-19 12:33:52 +0000428 *body* can now be an iterable.
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000429
Georg Brandl116aa622007-08-15 14:28:22 +0000430.. method:: HTTPConnection.getresponse()
431
432 Should be called after a request is sent to get the response from the server.
433 Returns an :class:`HTTPResponse` instance.
434
435 .. note::
436
437 Note that you must have read the whole response before you can send a new
438 request to the server.
439
440
441.. method:: HTTPConnection.set_debuglevel(level)
442
R. David Murrayd89bc3f2010-12-15 02:19:14 +0000443 Set the debugging level. The default debug level is ``0``, meaning no
444 debugging output is printed. Any value greater than ``0`` will cause all
445 currently defined debug output to be printed to stdout. The ``debuglevel``
446 is passed to any new :class:`HTTPResponse` objects that are created.
Georg Brandl116aa622007-08-15 14:28:22 +0000447
Mark Dickinson574b1d62009-10-01 20:20:09 +0000448 .. versionadded:: 3.1
Benjamin Petersonfa0d7032009-06-01 22:42:33 +0000449
Georg Brandl67b21b72010-08-17 15:07:14 +0000450
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000451.. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000452
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500453 Set the host and the port for HTTP Connect Tunnelling. This allows running
454 the connection through a proxy server.
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000455
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500456 The host and port arguments specify the endpoint of the tunneled connection
457 (i.e. the address included in the CONNECT request, *not* the address of the
458 proxy server).
459
460 The headers argument should be a mapping of extra HTTP headers to send with
461 the CONNECT request.
462
463 For example, to tunnel through a HTTPS proxy server running locally on port
464 8080, we would pass the address of the proxy to the :class:`HTTPSConnection`
465 constructor, and the address of the host that we eventually want to reach to
466 the :meth:`~HTTPConnection.set_tunnel` method::
467
468 >>> import http.client
469 >>> conn = http.client.HTTPSConnection("localhost", 8080)
470 >>> conn.set_tunnel("www.python.org")
471 >>> conn.request("HEAD","/index.html")
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000472
Senthil Kumaran2e910fd2009-07-25 04:27:38 +0000473 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000474
Georg Brandl67b21b72010-08-17 15:07:14 +0000475
Georg Brandl116aa622007-08-15 14:28:22 +0000476.. method:: HTTPConnection.connect()
477
478 Connect to the server specified when the object was created.
479
480
481.. method:: HTTPConnection.close()
482
483 Close the connection to the server.
484
485As an alternative to using the :meth:`request` method described above, you can
486also send your request step by step, by using the four functions below.
487
488
Georg Brandl036490d2009-05-17 13:00:36 +0000489.. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000490
491 This should be the first call after the connection to the server has been made.
492 It sends a line to the server consisting of the *request* string, the *selector*
493 string, and the HTTP version (``HTTP/1.1``). To disable automatic sending of
494 ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional
495 content encodings), specify *skip_host* or *skip_accept_encoding* with non-False
496 values.
497
Georg Brandl116aa622007-08-15 14:28:22 +0000498
499.. method:: HTTPConnection.putheader(header, argument[, ...])
500
501 Send an :rfc:`822`\ -style header to the server. It sends a line to the server
502 consisting of the header, a colon and a space, and the first argument. If more
503 arguments are given, continuation lines are sent, each consisting of a tab and
504 an argument.
505
506
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800507.. method:: HTTPConnection.endheaders(message_body=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000508
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800509 Send a blank line to the server, signalling the end of the headers. The
Senthil Kumaranad87fa62011-10-05 23:26:49 +0800510 optional *message_body* argument can be used to pass a message body
511 associated with the request. The message body will be sent in the same
512 packet as the message headers if it is string, otherwise it is sent in a
513 separate packet.
Georg Brandl116aa622007-08-15 14:28:22 +0000514
515.. method:: HTTPConnection.send(data)
516
517 Send data to the server. This should be used directly only after the
518 :meth:`endheaders` method has been called and before :meth:`getresponse` is
519 called.
520
521
522.. _httpresponse-objects:
523
524HTTPResponse Objects
525--------------------
526
Jeremy Hylton1052f892009-03-31 14:40:19 +0000527An :class:`HTTPResponse` instance wraps the HTTP response from the
528server. It provides access to the request headers and the entity
529body. The response is an iterable object and can be used in a with
530statement.
Georg Brandl116aa622007-08-15 14:28:22 +0000531
532
533.. method:: HTTPResponse.read([amt])
534
535 Reads and returns the response body, or up to the next *amt* bytes.
536
Antoine Pitrou38d96432011-12-06 22:33:57 +0100537.. method:: HTTPResponse.readinto(b)
538
539 Reads up to the next len(b) bytes of the response body into the buffer *b*.
540 Returns the number of bytes read.
541
542 .. versionadded:: 3.3
Georg Brandl116aa622007-08-15 14:28:22 +0000543
Georg Brandl036490d2009-05-17 13:00:36 +0000544.. method:: HTTPResponse.getheader(name, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000545
Senthil Kumaran790f8312010-08-02 17:09:02 +0000546 Return the value of the header *name*, or *default* if there is no header
547 matching *name*. If there is more than one header with the name *name*,
548 return all of the values joined by ', '. If 'default' is any iterable other
549 than a single string, its elements are similarly returned joined by commas.
Georg Brandl116aa622007-08-15 14:28:22 +0000550
551
552.. method:: HTTPResponse.getheaders()
553
554 Return a list of (header, value) tuples.
555
Senthil Kumaranceff5662010-09-21 01:57:43 +0000556.. method:: HTTPResponse.fileno()
557
558 Return the ``fileno`` of the underlying socket.
Georg Brandl116aa622007-08-15 14:28:22 +0000559
560.. attribute:: HTTPResponse.msg
561
Jeremy Hylton1052f892009-03-31 14:40:19 +0000562 A :class:`http.client.HTTPMessage` instance containing the response
563 headers. :class:`http.client.HTTPMessage` is a subclass of
564 :class:`email.message.Message`.
Georg Brandl116aa622007-08-15 14:28:22 +0000565
566
567.. attribute:: HTTPResponse.version
568
569 HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
570
571
572.. attribute:: HTTPResponse.status
573
574 Status code returned by server.
575
576
577.. attribute:: HTTPResponse.reason
578
579 Reason phrase returned by server.
580
581
Jeremy Hylton1052f892009-03-31 14:40:19 +0000582.. attribute:: HTTPResponse.debuglevel
583
Georg Brandlef871f62010-03-12 10:06:40 +0000584 A debugging hook. If :attr:`debuglevel` is greater than zero, messages
Jeremy Hylton1052f892009-03-31 14:40:19 +0000585 will be printed to stdout as the response is read and parsed.
586
Senthil Kumarance9b5962011-06-19 16:56:49 -0700587.. attribute:: HTTPResponse.closed
588
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200589 Is ``True`` if the stream is closed.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000590
Georg Brandl116aa622007-08-15 14:28:22 +0000591Examples
592--------
593
594Here is an example session that uses the ``GET`` method::
595
Georg Brandl24420152008-05-26 16:32:26 +0000596 >>> import http.client
597 >>> conn = http.client.HTTPConnection("www.python.org")
Georg Brandl116aa622007-08-15 14:28:22 +0000598 >>> conn.request("GET", "/index.html")
599 >>> r1 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000600 >>> print(r1.status, r1.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000601 200 OK
Senthil Kumarance9b5962011-06-19 16:56:49 -0700602 >>> data1 = r1.read() # This will return entire content.
603 >>> # The following example demonstrates reading data in chunks.
604 >>> conn.request("GET", "/index.html")
605 >>> r1 = conn.getresponse()
606 >>> while not r1.closed:
607 ... print(r1.read(200)) # 200 bytes
608 b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
609 ...
610 >>> # Example of an invalid request
Georg Brandl116aa622007-08-15 14:28:22 +0000611 >>> conn.request("GET", "/parrot.spam")
612 >>> r2 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000613 >>> print(r2.status, r2.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000614 404 Not Found
615 >>> data2 = r2.read()
616 >>> conn.close()
617
Fred Drake1587e3d2010-05-12 01:36:11 +0000618Here is an example session that uses the ``HEAD`` method. Note that the
619``HEAD`` method never returns any data. ::
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000620
621 >>> import http.client
622 >>> conn = http.client.HTTPConnection("www.python.org")
623 >>> conn.request("HEAD","/index.html")
624 >>> res = conn.getresponse()
625 >>> print(res.status, res.reason)
626 200 OK
627 >>> data = res.read()
628 >>> print(len(data))
629 0
630 >>> data == b''
631 True
632
Georg Brandl116aa622007-08-15 14:28:22 +0000633Here is an example session that shows how to ``POST`` requests::
634
Senthil Kumaranaca8fd72008-06-23 04:41:59 +0000635 >>> import http.client, urllib.parse
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800636 >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
Georg Brandl116aa622007-08-15 14:28:22 +0000637 >>> headers = {"Content-type": "application/x-www-form-urlencoded",
638 ... "Accept": "text/plain"}
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800639 >>> conn = http.client.HTTPConnection("bugs.python.org")
640 >>> conn.request("POST", "", params, headers)
Georg Brandl116aa622007-08-15 14:28:22 +0000641 >>> response = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000642 >>> print(response.status, response.reason)
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800643 302 Found
Georg Brandl116aa622007-08-15 14:28:22 +0000644 >>> data = response.read()
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800645 >>> data
646 b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
Georg Brandl116aa622007-08-15 14:28:22 +0000647 >>> conn.close()
648
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700649Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The
650difference lies only the server side where HTTP server will allow resources to
Senthil Kumarane66cc812013-03-13 13:42:47 -0700651be created via ``PUT`` request. It should be noted that custom HTTP methods
652+are also handled in :class:`urllib.request.Request` by sending the appropriate
653+method attribute.Here is an example session that shows how to do ``PUT``
654request using http.client::
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700655
656 >>> # This creates an HTTP message
657 >>> # with the content of BODY as the enclosed representation
Senthil Kumaran8b4a2722014-04-16 23:33:02 -0400658 >>> # for the resource http://localhost:8080/file
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700659 ...
660 >>> import http.client
661 >>> BODY = "***filecontents***"
662 >>> conn = http.client.HTTPConnection("localhost", 8080)
663 >>> conn.request("PUT", "/file", BODY)
664 >>> response = conn.getresponse()
Georg Brandld277a562013-10-06 12:42:18 +0200665 >>> print(response.status, response.reason)
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700666 200, OK
Jeremy Hylton1052f892009-03-31 14:40:19 +0000667
668.. _httpmessage-objects:
669
670HTTPMessage Objects
671-------------------
672
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000673An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
674response. It is implemented using the :class:`email.message.Message` class.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000675
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000676.. XXX Define the methods that clients can depend upon between versions.