blob: 649abd1587330785edb7e70eab0d4b1b5022d06f [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
Benjamin Peterson6de708f2015-04-20 18:18:14 -040022.. seealso::
23
Georg Brandl5d941342016-02-26 19:37:12 +010024 The `Requests package <https://requests.readthedocs.org/>`_
Benjamin Peterson6de708f2015-04-20 18:18:14 -040025 is recommended for a higher-level http client interface.
26
Georg Brandl116aa622007-08-15 14:28:22 +000027.. note::
28
Antoine Pitrou1ab19ca2010-10-13 10:39:21 +000029 HTTPS support is only available if Python was compiled with SSL support
30 (through the :mod:`ssl` module).
Georg Brandl116aa622007-08-15 14:28:22 +000031
Georg Brandl116aa622007-08-15 14:28:22 +000032The module provides the following classes:
33
34
Senthil Kumaran052ddb02013-03-18 14:11:41 -070035.. class:: HTTPConnection(host, port=None[, timeout], \
Ezio Melottie0add762012-09-14 06:32:35 +030036 source_address=None)
Georg Brandl116aa622007-08-15 14:28:22 +000037
38 An :class:`HTTPConnection` instance represents one transaction with an HTTP
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000039 server. It should be instantiated passing it a host and optional port
40 number. If no port number is passed, the port is extracted from the host
41 string if it has the form ``host:port``, else the default HTTP port (80) is
Antoine Pitrou988dbd72010-12-17 17:35:56 +000042 used. If the optional *timeout* parameter is given, blocking
Alexandre Vassalotti5f8ced22008-05-16 00:03:33 +000043 operations (like connection attempts) will timeout after that many seconds
Georg Brandlf78e02b2008-06-10 17:40:04 +000044 (if it is not given, the global default timeout setting is used).
Raymond Hettinger519c3082011-01-30 00:39:00 +000045 The optional *source_address* parameter may be a tuple of a (host, port)
Gregory P. Smithb4066372010-01-03 03:28:29 +000046 to use as the source address the HTTP connection is made from.
Georg Brandl116aa622007-08-15 14:28:22 +000047
48 For example, the following calls all create instances that connect to the server
49 at the same host and port::
50
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010051 >>> h1 = http.client.HTTPConnection('www.python.org')
52 >>> h2 = http.client.HTTPConnection('www.python.org:80')
53 >>> h3 = http.client.HTTPConnection('www.python.org', 80)
54 >>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)
Georg Brandl116aa622007-08-15 14:28:22 +000055
Gregory P. Smithb4066372010-01-03 03:28:29 +000056 .. versionchanged:: 3.2
57 *source_address* was added.
Georg Brandl116aa622007-08-15 14:28:22 +000058
Senthil Kumaranaced69f2013-03-19 01:22:56 -070059 .. versionchanged:: 3.4
R David Murray00569362014-01-03 13:04:25 -050060 The *strict* parameter was removed. HTTP 0.9-style "Simple Responses" are
61 not longer supported.
Gregory P. Smithb4066372010-01-03 03:28:29 +000062
Antoine Pitrou988dbd72010-12-17 17:35:56 +000063
Ezio Melottie0add762012-09-14 06:32:35 +030064.. class:: HTTPSConnection(host, port=None, key_file=None, \
Senthil Kumaran052ddb02013-03-18 14:11:41 -070065 cert_file=None[, timeout], \
Ezio Melottie0add762012-09-14 06:32:35 +030066 source_address=None, *, context=None, \
67 check_hostname=None)
Georg Brandl116aa622007-08-15 14:28:22 +000068
69 A subclass of :class:`HTTPConnection` that uses SSL for communication with
Antoine Pitrou803e6d62010-10-13 10:36:15 +000070 secure servers. Default port is ``443``. If *context* is specified, it
71 must be a :class:`ssl.SSLContext` instance describing the various SSL
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010072 options.
Georg Brandl116aa622007-08-15 14:28:22 +000073
Antoine Pitrou803e6d62010-10-13 10:36:15 +000074 *key_file* and *cert_file* are deprecated, please use
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010075 :meth:`ssl.SSLContext.load_cert_chain` instead, or let
76 :func:`ssl.create_default_context` select the system's trusted CA
Benjamin Petersona090f012014-12-07 13:18:25 -050077 certificates for you. The *check_hostname* parameter is also deprecated; the
Benjamin Petersone3b743c2014-12-07 17:26:38 -050078 :attr:`ssl.SSLContext.check_hostname` attribute of *context* should be used
Benjamin Petersona090f012014-12-07 13:18:25 -050079 instead.
Antoine Pitrou803e6d62010-10-13 10:36:15 +000080
Antoine Pitrouc5e075f2014-03-22 18:19:11 +010081 Please read :ref:`ssl-security` for more information on best practices.
82
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
Berker Peksagbabc6882015-02-20 09:39:38 +0200177.. exception:: LineTooLong
178
179 A subclass of :exc:`HTTPException`. Raised if an excessively long line
180 is received in the HTTP protocol from the server.
181
182
R David Murraycae7bdb2015-04-05 19:26:29 -0400183.. exception:: RemoteDisconnected
184
185 A subclass of :exc:`ConnectionResetError` and :exc:`BadStatusLine`. Raised
186 by :meth:`HTTPConnection.getresponse` when the attempt to read the response
187 results in no data read from the connection, indicating that the remote end
188 has closed the connection.
189
190 .. versionadded:: 3.5
191 Previously, :exc:`BadStatusLine`\ ``('')`` was raised.
192
193
Georg Brandlbf3f8eb2013-10-27 07:34:48 +0100194The constants defined in this module are:
Georg Brandl116aa622007-08-15 14:28:22 +0000195
196.. data:: HTTP_PORT
197
198 The default port for the HTTP protocol (always ``80``).
199
200
201.. data:: HTTPS_PORT
202
203 The default port for the HTTPS protocol (always ``443``).
204
Georg Brandl116aa622007-08-15 14:28:22 +0000205.. data:: responses
206
207 This dictionary maps the HTTP 1.1 status codes to the W3C names.
208
Georg Brandl24420152008-05-26 16:32:26 +0000209 Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
Georg Brandl116aa622007-08-15 14:28:22 +0000210
Berker Peksagcb18b952015-01-20 06:30:46 +0200211See :ref:`http-status-codes` for a list of HTTP status codes that are
212available in this module as constants.
213
Georg Brandl116aa622007-08-15 14:28:22 +0000214
215.. _httpconnection-objects:
216
217HTTPConnection Objects
218----------------------
219
220:class:`HTTPConnection` instances have the following methods:
221
222
Georg Brandl036490d2009-05-17 13:00:36 +0000223.. method:: HTTPConnection.request(method, url, body=None, headers={})
Georg Brandl116aa622007-08-15 14:28:22 +0000224
Jeremy Hylton236654b2009-03-27 20:24:34 +0000225 This will send a request to the server using the HTTP request
R David Murraybeed8402015-03-22 15:18:23 -0400226 method *method* and the selector *url*.
Georg Brandl116aa622007-08-15 14:28:22 +0000227
R David Murraybeed8402015-03-22 15:18:23 -0400228 If *body* is specified, the specified data is sent after the headers are
229 finished. It may be a string, a :term:`bytes-like object`, an open
230 :term:`file object`, or an iterable of :term:`bytes-like object`\s. If
231 *body* is a string, it is encoded as ISO-8851-1, the default for HTTP. If
232 it is a bytes-like object the bytes are sent as is. If it is a :term:`file
233 object`, the contents of the file is sent; this file object should support
234 at least the ``read()`` method. If the file object has a ``mode``
235 attribute, the data returned by the ``read()`` method will be encoded as
236 ISO-8851-1 unless the ``mode`` attribute contains the substring ``b``,
237 otherwise the data returned by ``read()`` is sent as is. If *body* is an
238 iterable, the elements of the iterable are sent as is until the iterable is
239 exhausted.
Jeremy Hylton236654b2009-03-27 20:24:34 +0000240
241 The *headers* argument should be a mapping of extra HTTP
242 headers to send with the request.
Georg Brandl116aa622007-08-15 14:28:22 +0000243
R David Murraybeed8402015-03-22 15:18:23 -0400244 If *headers* does not contain a Content-Length item, one is added
245 automatically if possible. If *body* is ``None``, the Content-Length header
246 is set to ``0`` for methods that expect a body (``PUT``, ``POST``, and
247 ``PATCH``). If *body* is a string or bytes object, the Content-Length
248 header is set to its length. If *body* is a :term:`file object` and it
249 works to call :func:`~os.fstat` on the result of its ``fileno()`` method,
250 then the Content-Length header is set to the ``st_size`` reported by the
251 ``fstat`` call. Otherwise no Content-Length header is added.
252
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000253 .. versionadded:: 3.2
Georg Brandl09a7df82010-12-19 12:33:52 +0000254 *body* can now be an iterable.
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000255
Georg Brandl116aa622007-08-15 14:28:22 +0000256.. method:: HTTPConnection.getresponse()
257
258 Should be called after a request is sent to get the response from the server.
259 Returns an :class:`HTTPResponse` instance.
260
261 .. note::
262
263 Note that you must have read the whole response before you can send a new
264 request to the server.
265
R David Murraycae7bdb2015-04-05 19:26:29 -0400266 .. versionchanged:: 3.5
267 If a :exc:`ConnectionError` or subclass is raised, the
268 :class:`HTTPConnection` object will be ready to reconnect when
269 a new request is sent.
270
Georg Brandl116aa622007-08-15 14:28:22 +0000271
272.. method:: HTTPConnection.set_debuglevel(level)
273
R. David Murrayd89bc3f2010-12-15 02:19:14 +0000274 Set the debugging level. The default debug level is ``0``, meaning no
275 debugging output is printed. Any value greater than ``0`` will cause all
276 currently defined debug output to be printed to stdout. The ``debuglevel``
277 is passed to any new :class:`HTTPResponse` objects that are created.
Georg Brandl116aa622007-08-15 14:28:22 +0000278
Mark Dickinson574b1d62009-10-01 20:20:09 +0000279 .. versionadded:: 3.1
Benjamin Petersonfa0d7032009-06-01 22:42:33 +0000280
Georg Brandl67b21b72010-08-17 15:07:14 +0000281
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000282.. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000283
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500284 Set the host and the port for HTTP Connect Tunnelling. This allows running
285 the connection through a proxy server.
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000286
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500287 The host and port arguments specify the endpoint of the tunneled connection
288 (i.e. the address included in the CONNECT request, *not* the address of the
289 proxy server).
290
291 The headers argument should be a mapping of extra HTTP headers to send with
292 the CONNECT request.
293
294 For example, to tunnel through a HTTPS proxy server running locally on port
295 8080, we would pass the address of the proxy to the :class:`HTTPSConnection`
296 constructor, and the address of the host that we eventually want to reach to
297 the :meth:`~HTTPConnection.set_tunnel` method::
298
299 >>> import http.client
300 >>> conn = http.client.HTTPSConnection("localhost", 8080)
301 >>> conn.set_tunnel("www.python.org")
302 >>> conn.request("HEAD","/index.html")
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000303
Senthil Kumaran2e910fd2009-07-25 04:27:38 +0000304 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000305
Georg Brandl67b21b72010-08-17 15:07:14 +0000306
Georg Brandl116aa622007-08-15 14:28:22 +0000307.. method:: HTTPConnection.connect()
308
R David Murraycae7bdb2015-04-05 19:26:29 -0400309 Connect to the server specified when the object was created. By default,
310 this is called automatically when making a request if the client does not
311 already have a connection.
Georg Brandl116aa622007-08-15 14:28:22 +0000312
313
314.. method:: HTTPConnection.close()
315
316 Close the connection to the server.
317
318As an alternative to using the :meth:`request` method described above, you can
319also send your request step by step, by using the four functions below.
320
321
Georg Brandl036490d2009-05-17 13:00:36 +0000322.. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000323
324 This should be the first call after the connection to the server has been made.
325 It sends a line to the server consisting of the *request* string, the *selector*
326 string, and the HTTP version (``HTTP/1.1``). To disable automatic sending of
327 ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional
328 content encodings), specify *skip_host* or *skip_accept_encoding* with non-False
329 values.
330
Georg Brandl116aa622007-08-15 14:28:22 +0000331
332.. method:: HTTPConnection.putheader(header, argument[, ...])
333
334 Send an :rfc:`822`\ -style header to the server. It sends a line to the server
335 consisting of the header, a colon and a space, and the first argument. If more
336 arguments are given, continuation lines are sent, each consisting of a tab and
337 an argument.
338
339
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800340.. method:: HTTPConnection.endheaders(message_body=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000341
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800342 Send a blank line to the server, signalling the end of the headers. The
Senthil Kumaranad87fa62011-10-05 23:26:49 +0800343 optional *message_body* argument can be used to pass a message body
344 associated with the request. The message body will be sent in the same
345 packet as the message headers if it is string, otherwise it is sent in a
346 separate packet.
Georg Brandl116aa622007-08-15 14:28:22 +0000347
348.. method:: HTTPConnection.send(data)
349
350 Send data to the server. This should be used directly only after the
351 :meth:`endheaders` method has been called and before :meth:`getresponse` is
352 called.
353
354
355.. _httpresponse-objects:
356
357HTTPResponse Objects
358--------------------
359
Jeremy Hylton1052f892009-03-31 14:40:19 +0000360An :class:`HTTPResponse` instance wraps the HTTP response from the
361server. It provides access to the request headers and the entity
362body. The response is an iterable object and can be used in a with
363statement.
Georg Brandl116aa622007-08-15 14:28:22 +0000364
Martin Panterce911c32016-03-17 06:42:48 +0000365.. versionchanged:: 3.5
366 The :class:`io.BufferedIOBase` interface is now implemented and
367 all of its reader operations are supported.
368
Georg Brandl116aa622007-08-15 14:28:22 +0000369
370.. method:: HTTPResponse.read([amt])
371
372 Reads and returns the response body, or up to the next *amt* bytes.
373
Antoine Pitrou38d96432011-12-06 22:33:57 +0100374.. method:: HTTPResponse.readinto(b)
375
376 Reads up to the next len(b) bytes of the response body into the buffer *b*.
377 Returns the number of bytes read.
378
379 .. versionadded:: 3.3
Georg Brandl116aa622007-08-15 14:28:22 +0000380
Georg Brandl036490d2009-05-17 13:00:36 +0000381.. method:: HTTPResponse.getheader(name, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000382
Senthil Kumaran790f8312010-08-02 17:09:02 +0000383 Return the value of the header *name*, or *default* if there is no header
384 matching *name*. If there is more than one header with the name *name*,
385 return all of the values joined by ', '. If 'default' is any iterable other
386 than a single string, its elements are similarly returned joined by commas.
Georg Brandl116aa622007-08-15 14:28:22 +0000387
388
389.. method:: HTTPResponse.getheaders()
390
391 Return a list of (header, value) tuples.
392
Senthil Kumaranceff5662010-09-21 01:57:43 +0000393.. method:: HTTPResponse.fileno()
394
395 Return the ``fileno`` of the underlying socket.
Georg Brandl116aa622007-08-15 14:28:22 +0000396
397.. attribute:: HTTPResponse.msg
398
Jeremy Hylton1052f892009-03-31 14:40:19 +0000399 A :class:`http.client.HTTPMessage` instance containing the response
400 headers. :class:`http.client.HTTPMessage` is a subclass of
401 :class:`email.message.Message`.
Georg Brandl116aa622007-08-15 14:28:22 +0000402
403
404.. attribute:: HTTPResponse.version
405
406 HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
407
408
409.. attribute:: HTTPResponse.status
410
411 Status code returned by server.
412
413
414.. attribute:: HTTPResponse.reason
415
416 Reason phrase returned by server.
417
418
Jeremy Hylton1052f892009-03-31 14:40:19 +0000419.. attribute:: HTTPResponse.debuglevel
420
Georg Brandlef871f62010-03-12 10:06:40 +0000421 A debugging hook. If :attr:`debuglevel` is greater than zero, messages
Jeremy Hylton1052f892009-03-31 14:40:19 +0000422 will be printed to stdout as the response is read and parsed.
423
Senthil Kumarance9b5962011-06-19 16:56:49 -0700424.. attribute:: HTTPResponse.closed
425
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200426 Is ``True`` if the stream is closed.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000427
Georg Brandl116aa622007-08-15 14:28:22 +0000428Examples
429--------
430
431Here is an example session that uses the ``GET`` method::
432
Georg Brandl24420152008-05-26 16:32:26 +0000433 >>> import http.client
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400434 >>> conn = http.client.HTTPSConnection("www.python.org")
435 >>> conn.request("GET", "/")
Georg Brandl116aa622007-08-15 14:28:22 +0000436 >>> r1 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000437 >>> print(r1.status, r1.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000438 200 OK
Senthil Kumarance9b5962011-06-19 16:56:49 -0700439 >>> data1 = r1.read() # This will return entire content.
440 >>> # The following example demonstrates reading data in chunks.
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400441 >>> conn.request("GET", "/")
Senthil Kumarance9b5962011-06-19 16:56:49 -0700442 >>> r1 = conn.getresponse()
443 >>> while not r1.closed:
444 ... print(r1.read(200)) # 200 bytes
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400445 b'<!doctype html>\n<!--[if"...
Senthil Kumarance9b5962011-06-19 16:56:49 -0700446 ...
447 >>> # Example of an invalid request
Georg Brandl116aa622007-08-15 14:28:22 +0000448 >>> conn.request("GET", "/parrot.spam")
449 >>> r2 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000450 >>> print(r2.status, r2.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000451 404 Not Found
452 >>> data2 = r2.read()
453 >>> conn.close()
454
Fred Drake1587e3d2010-05-12 01:36:11 +0000455Here is an example session that uses the ``HEAD`` method. Note that the
456``HEAD`` method never returns any data. ::
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000457
458 >>> import http.client
Benjamin Petersonac87ed72015-05-03 12:59:09 -0400459 >>> conn = http.client.HTTPSConnection("www.python.org")
460 >>> conn.request("HEAD", "/")
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000461 >>> res = conn.getresponse()
462 >>> print(res.status, res.reason)
463 200 OK
464 >>> data = res.read()
465 >>> print(len(data))
466 0
467 >>> data == b''
468 True
469
Georg Brandl116aa622007-08-15 14:28:22 +0000470Here is an example session that shows how to ``POST`` requests::
471
Senthil Kumaranaca8fd72008-06-23 04:41:59 +0000472 >>> import http.client, urllib.parse
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800473 >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
Georg Brandl116aa622007-08-15 14:28:22 +0000474 >>> headers = {"Content-type": "application/x-www-form-urlencoded",
475 ... "Accept": "text/plain"}
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800476 >>> conn = http.client.HTTPConnection("bugs.python.org")
477 >>> conn.request("POST", "", params, headers)
Georg Brandl116aa622007-08-15 14:28:22 +0000478 >>> response = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000479 >>> print(response.status, response.reason)
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800480 302 Found
Georg Brandl116aa622007-08-15 14:28:22 +0000481 >>> data = response.read()
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800482 >>> data
483 b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
Georg Brandl116aa622007-08-15 14:28:22 +0000484 >>> conn.close()
485
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700486Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The
487difference lies only the server side where HTTP server will allow resources to
Senthil Kumarane66cc812013-03-13 13:42:47 -0700488be created via ``PUT`` request. It should be noted that custom HTTP methods
489+are also handled in :class:`urllib.request.Request` by sending the appropriate
490+method attribute.Here is an example session that shows how to do ``PUT``
491request using http.client::
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700492
493 >>> # This creates an HTTP message
494 >>> # with the content of BODY as the enclosed representation
Senthil Kumaran8b4a2722014-04-16 23:33:02 -0400495 >>> # for the resource http://localhost:8080/file
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700496 ...
497 >>> import http.client
498 >>> BODY = "***filecontents***"
499 >>> conn = http.client.HTTPConnection("localhost", 8080)
500 >>> conn.request("PUT", "/file", BODY)
501 >>> response = conn.getresponse()
Georg Brandld277a562013-10-06 12:42:18 +0200502 >>> print(response.status, response.reason)
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700503 200, OK
Jeremy Hylton1052f892009-03-31 14:40:19 +0000504
505.. _httpmessage-objects:
506
507HTTPMessage Objects
508-------------------
509
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000510An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
511response. It is implemented using the :class:`email.message.Message` class.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000512
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000513.. XXX Define the methods that clients can depend upon between versions.