blob: e1acf9273e2937486d8ec5e9ed80f3407f6b42ad [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
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04007**Source code:** :source:`Lib/http/client.py`
Georg Brandl116aa622007-08-15 14:28:22 +00008
9.. index::
10 pair: HTTP; protocol
Georg Brandl24420152008-05-26 16:32:26 +000011 single: HTTP; http.client (standard module)
Georg Brandl116aa622007-08-15 14:28:22 +000012
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000013.. index:: module: urllib.request
Georg Brandl116aa622007-08-15 14:28:22 +000014
Raymond Hettinger469271d2011-01-27 20:38:46 +000015--------------
16
Georg Brandl116aa622007-08-15 14:28:22 +000017This module defines classes which implement the client side of the HTTP and
Senthil Kumaranaca8fd72008-06-23 04:41:59 +000018HTTPS protocols. It is normally not used directly --- the module
Georg Brandl0f7ede42008-06-23 11:23:31 +000019:mod:`urllib.request` uses it to handle URLs that use HTTP and HTTPS.
Georg Brandl116aa622007-08-15 14:28:22 +000020
Benjamin Peterson6de708f2015-04-20 18:18:14 -040021.. seealso::
22
Andrew Kuchling58c534d2016-11-08 22:33:31 -050023 The `Requests package <http://docs.python-requests.org/>`_
Martin Panterfe289c02016-05-28 02:20:39 +000024 is recommended for a higher-level HTTP client interface.
Benjamin Peterson6de708f2015-04-20 18:18:14 -040025
Georg Brandl116aa622007-08-15 14:28:22 +000026.. note::
27
Antoine Pitrou1ab19ca2010-10-13 10:39:21 +000028 HTTPS support is only available if Python was compiled with SSL support
29 (through the :mod:`ssl` module).
Georg Brandl116aa622007-08-15 14:28:22 +000030
Georg Brandl116aa622007-08-15 14:28:22 +000031The module provides the following classes:
32
33
Senthil Kumaran5dc504c2016-09-08 14:28:01 -070034.. class:: HTTPConnection(host, port=None[, timeout], source_address=None)
Georg Brandl116aa622007-08-15 14:28:22 +000035
36 An :class:`HTTPConnection` instance represents one transaction with an HTTP
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000037 server. It should be instantiated passing it a host and optional port
38 number. If no port number is passed, the port is extracted from the host
39 string if it has the form ``host:port``, else the default HTTP port (80) is
Antoine Pitrou988dbd72010-12-17 17:35:56 +000040 used. If the optional *timeout* parameter is given, blocking
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000041 operations (like connection attempts) will timeout after that many seconds
Georg Brandlf78e02b2008-06-10 17:40:04 +000042 (if it is not given, the global default timeout setting is used).
Raymond Hettinger519c3082011-01-30 00:39:00 +000043 The optional *source_address* parameter may be a tuple of a (host, port)
Gregory P. Smithb4066372010-01-03 03:28:29 +000044 to use as the source address the HTTP connection is made from.
Georg Brandl116aa622007-08-15 14:28:22 +000045
46 For example, the following calls all create instances that connect to the server
47 at the same host and port::
48
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010049 >>> h1 = http.client.HTTPConnection('www.python.org')
50 >>> h2 = http.client.HTTPConnection('www.python.org:80')
51 >>> h3 = http.client.HTTPConnection('www.python.org', 80)
52 >>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
Georg Brandl116aa622007-08-15 14:28:22 +000053
Gregory P. Smithb4066372010-01-03 03:28:29 +000054 .. versionchanged:: 3.2
55 *source_address* was added.
Georg Brandl116aa622007-08-15 14:28:22 +000056
Senthil Kumaranaced69f2013-03-19 01:22:56 -070057 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050058 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
59 not longer supported.
Gregory P. Smithb4066372010-01-03 03:28:29 +000060
Antoine Pitrou988dbd72010-12-17 17:35:56 +000061
Ezio Melottie0add762012-09-14 06:32:35 +030062.. class:: HTTPSConnection(host, port=None, key_file=None, \
Senthil Kumaran052ddb02013-03-18 14:11:41 -070063 cert_file=None[, timeout], \
Ezio Melottie0add762012-09-14 06:32:35 +030064 source_address=None, *, context=None, \
65 check_hostname=None)
Georg Brandl116aa622007-08-15 14:28:22 +000066
67 A subclass of :class:`HTTPConnection` that uses SSL for communication with
Antoine Pitrou803e6d62010-10-13 10:36:15 +000068 secure servers. Default port is ``443``. If *context* is specified, it
69 must be a :class:`ssl.SSLContext` instance describing the various SSL
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010070 options.
Georg Brandl116aa622007-08-15 14:28:22 +000071
Antoine Pitrou803e6d62010-10-13 10:36:15 +000072 *key_file* and *cert_file* are deprecated, please use
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010073 :meth:`ssl.SSLContext.load_cert_chain` instead, or let
74 :func:`ssl.create_default_context` select the system's trusted CA
Benjamin Petersona090f012014-12-07 13:18:25 -050075 certificates for you. The *check_hostname* parameter is also deprecated; the
Benjamin Petersone3b743c2014-12-07 17:26:38 -050076 :attr:`ssl.SSLContext.check_hostname` attribute of *context* should be used
Benjamin Petersona090f012014-12-07 13:18:25 -050077 instead.
Antoine Pitrou803e6d62010-10-13 10:36:15 +000078
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010079 Please read :ref:`ssl-security` for more information on best practices.
80
Gregory P. Smithb4066372010-01-03 03:28:29 +000081 .. versionchanged:: 3.2
Antoine Pitrou803e6d62010-10-13 10:36:15 +000082 *source_address*, *context* and *check_hostname* were added.
Gregory P. Smithb4066372010-01-03 03:28:29 +000083
Antoine Pitroud5323212010-10-22 18:19:07 +000084 .. versionchanged:: 3.2
85 This class now supports HTTPS virtual hosts if possible (that is,
86 if :data:`ssl.HAS_SNI` is true).
87
Senthil Kumaranaced69f2013-03-19 01:22:56 -070088 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050089 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
90 no longer supported.
Georg Brandl116aa622007-08-15 14:28:22 +000091
Benjamin Peterson4ffb0752014-11-03 14:29:33 -050092 .. versionchanged:: 3.4.3
93 This class now performs all the necessary certificate and hostname checks
94 by default. To revert to the previous, unverified, behavior
95 :func:`ssl._create_unverified_context` can be passed to the *context*
96 parameter.
97
Georg Brandl116aa622007-08-15 14:28:22 +000098
Senthil Kumaran052ddb02013-03-18 14:11:41 -070099.. class:: HTTPResponse(sock, debuglevel=0, method=None, url=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000100
Jeremy Hylton1052f892009-03-31 14:40:19 +0000101 Class whose instances are returned upon successful connection. Not
102 instantiated directly by user.
Georg Brandl116aa622007-08-15 14:28:22 +0000103
Senthil Kumaranaced69f2013-03-19 01:22:56 -0700104 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -0500105 The *strict* parameter was removed. HTTP 0.9 style "Simple Responses" are
106 no longer supported.
Antoine Pitrou988dbd72010-12-17 17:35:56 +0000107
Georg Brandl116aa622007-08-15 14:28:22 +0000108
109The following exceptions are raised as appropriate:
110
111
112.. exception:: HTTPException
113
114 The base class of the other exceptions in this module. It is a subclass of
115 :exc:`Exception`.
116
Georg Brandl116aa622007-08-15 14:28:22 +0000117
118.. exception:: NotConnected
119
120 A subclass of :exc:`HTTPException`.
121
Georg Brandl116aa622007-08-15 14:28:22 +0000122
123.. exception:: InvalidURL
124
125 A subclass of :exc:`HTTPException`, raised if a port is given and is either
126 non-numeric or empty.
127
Georg Brandl116aa622007-08-15 14:28:22 +0000128
129.. exception:: UnknownProtocol
130
131 A subclass of :exc:`HTTPException`.
132
Georg Brandl116aa622007-08-15 14:28:22 +0000133
134.. exception:: UnknownTransferEncoding
135
136 A subclass of :exc:`HTTPException`.
137
Georg Brandl116aa622007-08-15 14:28:22 +0000138
139.. exception:: UnimplementedFileMode
140
141 A subclass of :exc:`HTTPException`.
142
Georg Brandl116aa622007-08-15 14:28:22 +0000143
144.. exception:: IncompleteRead
145
146 A subclass of :exc:`HTTPException`.
147
Georg Brandl116aa622007-08-15 14:28:22 +0000148
149.. exception:: ImproperConnectionState
150
151 A subclass of :exc:`HTTPException`.
152
Georg Brandl116aa622007-08-15 14:28:22 +0000153
154.. exception:: CannotSendRequest
155
156 A subclass of :exc:`ImproperConnectionState`.
157
Georg Brandl116aa622007-08-15 14:28:22 +0000158
159.. exception:: CannotSendHeader
160
161 A subclass of :exc:`ImproperConnectionState`.
162
Georg Brandl116aa622007-08-15 14:28:22 +0000163
164.. exception:: ResponseNotReady
165
166 A subclass of :exc:`ImproperConnectionState`.
167
Georg Brandl116aa622007-08-15 14:28:22 +0000168
169.. exception:: BadStatusLine
170
171 A subclass of :exc:`HTTPException`. Raised if a server responds with a HTTP
172 status code that we don't understand.
173
Georg Brandl116aa622007-08-15 14:28:22 +0000174
Berker Peksagbabc6882015-02-20 09:39:38 +0200175.. exception:: LineTooLong
176
177 A subclass of :exc:`HTTPException`. Raised if an excessively long line
178 is received in the HTTP protocol from the server.
179
180
R David Murraycae7bdb2015-04-05 19:26:29 -0400181.. exception:: RemoteDisconnected
182
183 A subclass of :exc:`ConnectionResetError` and :exc:`BadStatusLine`. Raised
184 by :meth:`HTTPConnection.getresponse` when the attempt to read the response
185 results in no data read from the connection, indicating that the remote end
186 has closed the connection.
187
188 .. versionadded:: 3.5
189 Previously, :exc:`BadStatusLine`\ ``('')`` was raised.
190
191
Georg Brandlbf3f8eb2013-10-27 07:34:48 +0100192The constants defined in this module are:
Georg Brandl116aa622007-08-15 14:28:22 +0000193
194.. data:: HTTP_PORT
195
196 The default port for the HTTP protocol (always ``80``).
197
Georg Brandl116aa622007-08-15 14:28:22 +0000198.. data:: HTTPS_PORT
199
200 The default port for the HTTPS protocol (always ``443``).
201
Georg Brandl116aa622007-08-15 14:28:22 +0000202.. data:: responses
203
204 This dictionary maps the HTTP 1.1 status codes to the W3C names.
205
Georg Brandl24420152008-05-26 16:32:26 +0000206 Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
Georg Brandl116aa622007-08-15 14:28:22 +0000207
Berker Peksagcb18b952015-01-20 06:30:46 +0200208See :ref:`http-status-codes` for a list of HTTP status codes that are
209available in this module as constants.
210
Georg Brandl116aa622007-08-15 14:28:22 +0000211
212.. _httpconnection-objects:
213
214HTTPConnection Objects
215----------------------
216
217:class:`HTTPConnection` instances have the following methods:
218
219
Georg Brandl036490d2009-05-17 13:00:36 +0000220.. method:: HTTPConnection.request(method, url, body=None, headers={})
Georg Brandl116aa622007-08-15 14:28:22 +0000221
Jeremy Hylton236654b2009-03-27 20:24:34 +0000222 This will send a request to the server using the HTTP request
R David Murraybeed8402015-03-22 15:18:23 -0400223 method *method* and the selector *url*.
Georg Brandl116aa622007-08-15 14:28:22 +0000224
R David Murraybeed8402015-03-22 15:18:23 -0400225 If *body* is specified, the specified data is sent after the headers are
226 finished. It may be a string, a :term:`bytes-like object`, an open
227 :term:`file object`, or an iterable of :term:`bytes-like object`\s. If
Martin Panter540f0452016-08-10 05:25:16 +0000228 *body* is a string, it is encoded as ISO-8859-1, the default for HTTP. If
R David Murraybeed8402015-03-22 15:18:23 -0400229 it is a bytes-like object the bytes are sent as is. If it is a :term:`file
230 object`, the contents of the file is sent; this file object should support
231 at least the ``read()`` method. If the file object has a ``mode``
232 attribute, the data returned by the ``read()`` method will be encoded as
Martin Panter540f0452016-08-10 05:25:16 +0000233 ISO-8859-1 unless the ``mode`` attribute contains the substring ``b``,
R David Murraybeed8402015-03-22 15:18:23 -0400234 otherwise the data returned by ``read()`` is sent as is. If *body* is an
235 iterable, the elements of the iterable are sent as is until the iterable is
236 exhausted.
Jeremy Hylton236654b2009-03-27 20:24:34 +0000237
238 The *headers* argument should be a mapping of extra HTTP
239 headers to send with the request.
Georg Brandl116aa622007-08-15 14:28:22 +0000240
R David Murraybeed8402015-03-22 15:18:23 -0400241 If *headers* does not contain a Content-Length item, one is added
242 automatically if possible. If *body* is ``None``, the Content-Length header
243 is set to ``0`` for methods that expect a body (``PUT``, ``POST``, and
244 ``PATCH``). If *body* is a string or bytes object, the Content-Length
245 header is set to its length. If *body* is a :term:`file object` and it
246 works to call :func:`~os.fstat` on the result of its ``fileno()`` method,
247 then the Content-Length header is set to the ``st_size`` reported by the
248 ``fstat`` call. Otherwise no Content-Length header is added.
249
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000250 .. versionadded:: 3.2
Georg Brandl09a7df82010-12-19 12:33:52 +0000251 *body* can now be an iterable.
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000252
Georg Brandl116aa622007-08-15 14:28:22 +0000253.. method:: HTTPConnection.getresponse()
254
255 Should be called after a request is sent to get the response from the server.
256 Returns an :class:`HTTPResponse` instance.
257
258 .. note::
259
260 Note that you must have read the whole response before you can send a new
261 request to the server.
262
R David Murraycae7bdb2015-04-05 19:26:29 -0400263 .. versionchanged:: 3.5
264 If a :exc:`ConnectionError` or subclass is raised, the
265 :class:`HTTPConnection` object will be ready to reconnect when
266 a new request is sent.
267
Georg Brandl116aa622007-08-15 14:28:22 +0000268
269.. method:: HTTPConnection.set_debuglevel(level)
270
R. David Murrayd89bc3f2010-12-15 02:19:14 +0000271 Set the debugging level. The default debug level is ``0``, meaning no
272 debugging output is printed. Any value greater than ``0`` will cause all
273 currently defined debug output to be printed to stdout. The ``debuglevel``
274 is passed to any new :class:`HTTPResponse` objects that are created.
Georg Brandl116aa622007-08-15 14:28:22 +0000275
Mark Dickinson574b1d62009-10-01 20:20:09 +0000276 .. versionadded:: 3.1
Benjamin Petersonfa0d7032009-06-01 22:42:33 +0000277
Georg Brandl67b21b72010-08-17 15:07:14 +0000278
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000279.. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000280
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500281 Set the host and the port for HTTP Connect Tunnelling. This allows running
282 the connection through a proxy server.
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000283
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500284 The host and port arguments specify the endpoint of the tunneled connection
285 (i.e. the address included in the CONNECT request, *not* the address of the
286 proxy server).
287
288 The headers argument should be a mapping of extra HTTP headers to send with
289 the CONNECT request.
290
291 For example, to tunnel through a HTTPS proxy server running locally on port
292 8080, we would pass the address of the proxy to the :class:`HTTPSConnection`
293 constructor, and the address of the host that we eventually want to reach to
294 the :meth:`~HTTPConnection.set_tunnel` method::
295
296 >>> import http.client
297 >>> conn = http.client.HTTPSConnection("localhost", 8080)
298 >>> conn.set_tunnel("www.python.org")
299 >>> conn.request("HEAD","/index.html")
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000300
Senthil Kumaran2e910fd2009-07-25 04:27:38 +0000301 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Georg Brandl67b21b72010-08-17 15:07:14 +0000303
Georg Brandl116aa622007-08-15 14:28:22 +0000304.. method:: HTTPConnection.connect()
305
R David Murraycae7bdb2015-04-05 19:26:29 -0400306 Connect to the server specified when the object was created. By default,
307 this is called automatically when making a request if the client does not
308 already have a connection.
Georg Brandl116aa622007-08-15 14:28:22 +0000309
310
311.. method:: HTTPConnection.close()
312
313 Close the connection to the server.
314
315As an alternative to using the :meth:`request` method described above, you can
316also send your request step by step, by using the four functions below.
317
318
Senthil Kumaran5dc504c2016-09-08 14:28:01 -0700319.. method:: HTTPConnection.putrequest(method, url, skip_host=False, \
320 skip_accept_encoding=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000321
Senthil Kumaran5dc504c2016-09-08 14:28:01 -0700322 This should be the first call after the connection to the server has been
323 made. It sends a line to the server consisting of the *method* string,
324 the *url* string, and the HTTP version (``HTTP/1.1``). To disable automatic
325 sending of ``Host:`` or ``Accept-Encoding:`` headers (for example to accept
326 additional content encodings), specify *skip_host* or *skip_accept_encoding*
327 with non-False values.
Georg Brandl116aa622007-08-15 14:28:22 +0000328
Georg Brandl116aa622007-08-15 14:28:22 +0000329
330.. method:: HTTPConnection.putheader(header, argument[, ...])
331
332 Send an :rfc:`822`\ -style header to the server. It sends a line to the server
333 consisting of the header, a colon and a space, and the first argument. If more
334 arguments are given, continuation lines are sent, each consisting of a tab and
335 an argument.
336
337
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800338.. method:: HTTPConnection.endheaders(message_body=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800340 Send a blank line to the server, signalling the end of the headers. The
Senthil Kumaranad87fa62011-10-05 23:26:49 +0800341 optional *message_body* argument can be used to pass a message body
342 associated with the request. The message body will be sent in the same
343 packet as the message headers if it is string, otherwise it is sent in a
344 separate packet.
Georg Brandl116aa622007-08-15 14:28:22 +0000345
346.. method:: HTTPConnection.send(data)
347
348 Send data to the server. This should be used directly only after the
349 :meth:`endheaders` method has been called and before :meth:`getresponse` is
350 called.
351
352
353.. _httpresponse-objects:
354
355HTTPResponse Objects
356--------------------
357
Jeremy Hylton1052f892009-03-31 14:40:19 +0000358An :class:`HTTPResponse` instance wraps the HTTP response from the
359server. It provides access to the request headers and the entity
360body. The response is an iterable object and can be used in a with
361statement.
Georg Brandl116aa622007-08-15 14:28:22 +0000362
Martin Panterce911c32016-03-17 06:42:48 +0000363.. versionchanged:: 3.5
364 The :class:`io.BufferedIOBase` interface is now implemented and
365 all of its reader operations are supported.
366
Georg Brandl116aa622007-08-15 14:28:22 +0000367
368.. method:: HTTPResponse.read([amt])
369
370 Reads and returns the response body, or up to the next *amt* bytes.
371
Antoine Pitrou38d96432011-12-06 22:33:57 +0100372.. method:: HTTPResponse.readinto(b)
373
374 Reads up to the next len(b) bytes of the response body into the buffer *b*.
375 Returns the number of bytes read.
376
377 .. versionadded:: 3.3
Georg Brandl116aa622007-08-15 14:28:22 +0000378
Georg Brandl036490d2009-05-17 13:00:36 +0000379.. method:: HTTPResponse.getheader(name, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000380
Senthil Kumaran790f8312010-08-02 17:09:02 +0000381 Return the value of the header *name*, or *default* if there is no header
382 matching *name*. If there is more than one header with the name *name*,
383 return all of the values joined by ', '. If 'default' is any iterable other
384 than a single string, its elements are similarly returned joined by commas.
Georg Brandl116aa622007-08-15 14:28:22 +0000385
Georg Brandl116aa622007-08-15 14:28:22 +0000386.. method:: HTTPResponse.getheaders()
387
388 Return a list of (header, value) tuples.
389
Senthil Kumaranceff5662010-09-21 01:57:43 +0000390.. method:: HTTPResponse.fileno()
391
392 Return the ``fileno`` of the underlying socket.
Georg Brandl116aa622007-08-15 14:28:22 +0000393
394.. attribute:: HTTPResponse.msg
395
Jeremy Hylton1052f892009-03-31 14:40:19 +0000396 A :class:`http.client.HTTPMessage` instance containing the response
397 headers. :class:`http.client.HTTPMessage` is a subclass of
398 :class:`email.message.Message`.
Georg Brandl116aa622007-08-15 14:28:22 +0000399
Georg Brandl116aa622007-08-15 14:28:22 +0000400.. attribute:: HTTPResponse.version
401
402 HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
403
Georg Brandl116aa622007-08-15 14:28:22 +0000404.. attribute:: HTTPResponse.status
405
406 Status code returned by server.
407
Georg Brandl116aa622007-08-15 14:28:22 +0000408.. attribute:: HTTPResponse.reason
409
410 Reason phrase returned by server.
411
Jeremy Hylton1052f892009-03-31 14:40:19 +0000412.. attribute:: HTTPResponse.debuglevel
413
Georg Brandlef871f62010-03-12 10:06:40 +0000414 A debugging hook. If :attr:`debuglevel` is greater than zero, messages
Jeremy Hylton1052f892009-03-31 14:40:19 +0000415 will be printed to stdout as the response is read and parsed.
416
Senthil Kumarance9b5962011-06-19 16:56:49 -0700417.. attribute:: HTTPResponse.closed
418
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200419 Is ``True`` if the stream is closed.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000420
Georg Brandl116aa622007-08-15 14:28:22 +0000421Examples
422--------
423
424Here is an example session that uses the ``GET`` method::
425
Georg Brandl24420152008-05-26 16:32:26 +0000426 >>> import http.client
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400427 >>> conn = http.client.HTTPSConnection("www.python.org")
428 >>> conn.request("GET", "/")
Georg Brandl116aa622007-08-15 14:28:22 +0000429 >>> r1 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000430 >>> print(r1.status, r1.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000431 200 OK
Senthil Kumarance9b5962011-06-19 16:56:49 -0700432 >>> data1 = r1.read() # This will return entire content.
433 >>> # The following example demonstrates reading data in chunks.
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400434 >>> conn.request("GET", "/")
Senthil Kumarance9b5962011-06-19 16:56:49 -0700435 >>> r1 = conn.getresponse()
436 >>> while not r1.closed:
Serhiy Storchakadba90392016-05-10 12:01:23 +0300437 ... print(r1.read(200)) # 200 bytes
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400438 b'<!doctype html>\n<!--[if"...
Senthil Kumarance9b5962011-06-19 16:56:49 -0700439 ...
440 >>> # Example of an invalid request
Georg Brandl116aa622007-08-15 14:28:22 +0000441 >>> conn.request("GET", "/parrot.spam")
442 >>> r2 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000443 >>> print(r2.status, r2.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000444 404 Not Found
445 >>> data2 = r2.read()
446 >>> conn.close()
447
Fred Drake1587e3d2010-05-12 01:36:11 +0000448Here is an example session that uses the ``HEAD`` method. Note that the
449``HEAD`` method never returns any data. ::
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000450
451 >>> import http.client
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400452 >>> conn = http.client.HTTPSConnection("www.python.org")
453 >>> conn.request("HEAD", "/")
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000454 >>> res = conn.getresponse()
455 >>> print(res.status, res.reason)
456 200 OK
457 >>> data = res.read()
458 >>> print(len(data))
459 0
460 >>> data == b''
461 True
462
Georg Brandl116aa622007-08-15 14:28:22 +0000463Here is an example session that shows how to ``POST`` requests::
464
Senthil Kumaranaca8fd72008-06-23 04:41:59 +0000465 >>> import http.client, urllib.parse
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800466 >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
Georg Brandl116aa622007-08-15 14:28:22 +0000467 >>> headers = {"Content-type": "application/x-www-form-urlencoded",
468 ... "Accept": "text/plain"}
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800469 >>> conn = http.client.HTTPConnection("bugs.python.org")
470 >>> conn.request("POST", "", params, headers)
Georg Brandl116aa622007-08-15 14:28:22 +0000471 >>> response = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000472 >>> print(response.status, response.reason)
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800473 302 Found
Georg Brandl116aa622007-08-15 14:28:22 +0000474 >>> data = response.read()
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800475 >>> data
476 b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
Georg Brandl116aa622007-08-15 14:28:22 +0000477 >>> conn.close()
478
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700479Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The
480difference lies only the server side where HTTP server will allow resources to
Senthil Kumarane66cc812013-03-13 13:42:47 -0700481be created via ``PUT`` request. It should be noted that custom HTTP methods
482+are also handled in :class:`urllib.request.Request` by sending the appropriate
483+method attribute.Here is an example session that shows how to do ``PUT``
484request using http.client::
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700485
486 >>> # This creates an HTTP message
487 >>> # with the content of BODY as the enclosed representation
Senthil Kumaran8b4a2722014-04-16 23:33:02 -0400488 >>> # for the resource http://localhost:8080/file
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700489 ...
490 >>> import http.client
491 >>> BODY = "***filecontents***"
492 >>> conn = http.client.HTTPConnection("localhost", 8080)
493 >>> conn.request("PUT", "/file", BODY)
494 >>> response = conn.getresponse()
Georg Brandld277a562013-10-06 12:42:18 +0200495 >>> print(response.status, response.reason)
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700496 200, OK
Jeremy Hylton1052f892009-03-31 14:40:19 +0000497
498.. _httpmessage-objects:
499
500HTTPMessage Objects
501-------------------
502
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000503An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
504response. It is implemented using the :class:`email.message.Message` class.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000505
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000506.. XXX Define the methods that clients can depend upon between versions.