blob: b495f41de865c8709076e70e04403d2d62201637 [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
Benjamin Petersone3b743c2014-12-07 17:26:38 -050073 :attr:`ssl.SSLContext.check_hostname` attribute of *context* should be used
Benjamin Petersona090f012014-12-07 13:18:25 -050074 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
Georg Brandl116aa622007-08-15 14:28:22 +0000183.. data:: responses
184
185 This dictionary maps the HTTP 1.1 status codes to the W3C names.
186
Georg Brandl24420152008-05-26 16:32:26 +0000187 Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
Georg Brandl116aa622007-08-15 14:28:22 +0000188
Berker Peksagcb18b952015-01-20 06:30:46 +0200189See :ref:`http-status-codes` for a list of HTTP status codes that are
190available in this module as constants.
191
Georg Brandl116aa622007-08-15 14:28:22 +0000192
193.. _httpconnection-objects:
194
195HTTPConnection Objects
196----------------------
197
198:class:`HTTPConnection` instances have the following methods:
199
200
Georg Brandl036490d2009-05-17 13:00:36 +0000201.. method:: HTTPConnection.request(method, url, body=None, headers={})
Georg Brandl116aa622007-08-15 14:28:22 +0000202
Jeremy Hylton236654b2009-03-27 20:24:34 +0000203 This will send a request to the server using the HTTP request
204 method *method* and the selector *url*. If the *body* argument is
205 present, it should be string or bytes object of data to send after
206 the headers are finished. Strings are encoded as ISO-8859-1, the
207 default charset for HTTP. To use other encodings, pass a bytes
208 object. The Content-Length header is set to the length of the
209 string.
Georg Brandl116aa622007-08-15 14:28:22 +0000210
Antoine Pitrou11cb9612010-09-15 11:11:28 +0000211 The *body* may also be an open :term:`file object`, in which case the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000212 contents of the file is sent; this file object should support ``fileno()``
213 and ``read()`` methods. The header Content-Length is automatically set to
214 the length of the file as reported by stat. The *body* argument may also be
Raymond Hettinger519c3082011-01-30 00:39:00 +0000215 an iterable and Content-Length header should be explicitly provided when the
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000216 body is an iterable.
Jeremy Hylton236654b2009-03-27 20:24:34 +0000217
218 The *headers* argument should be a mapping of extra HTTP
219 headers to send with the request.
Georg Brandl116aa622007-08-15 14:28:22 +0000220
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000221 .. versionadded:: 3.2
Georg Brandl09a7df82010-12-19 12:33:52 +0000222 *body* can now be an iterable.
Senthil Kumaran7bc0d872010-12-19 10:49:52 +0000223
Georg Brandl116aa622007-08-15 14:28:22 +0000224.. method:: HTTPConnection.getresponse()
225
226 Should be called after a request is sent to get the response from the server.
227 Returns an :class:`HTTPResponse` instance.
228
229 .. note::
230
231 Note that you must have read the whole response before you can send a new
232 request to the server.
233
234
235.. method:: HTTPConnection.set_debuglevel(level)
236
R. David Murrayd89bc3f2010-12-15 02:19:14 +0000237 Set the debugging level. The default debug level is ``0``, meaning no
238 debugging output is printed. Any value greater than ``0`` will cause all
239 currently defined debug output to be printed to stdout. The ``debuglevel``
240 is passed to any new :class:`HTTPResponse` objects that are created.
Georg Brandl116aa622007-08-15 14:28:22 +0000241
Mark Dickinson574b1d62009-10-01 20:20:09 +0000242 .. versionadded:: 3.1
Benjamin Petersonfa0d7032009-06-01 22:42:33 +0000243
Georg Brandl67b21b72010-08-17 15:07:14 +0000244
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000245.. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000246
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500247 Set the host and the port for HTTP Connect Tunnelling. This allows running
248 the connection through a proxy server.
Senthil Kumaran97f0c6b2009-07-25 04:24:38 +0000249
Benjamin Petersona48d9ea2014-03-16 15:55:39 -0500250 The host and port arguments specify the endpoint of the tunneled connection
251 (i.e. the address included in the CONNECT request, *not* the address of the
252 proxy server).
253
254 The headers argument should be a mapping of extra HTTP headers to send with
255 the CONNECT request.
256
257 For example, to tunnel through a HTTPS proxy server running locally on port
258 8080, we would pass the address of the proxy to the :class:`HTTPSConnection`
259 constructor, and the address of the host that we eventually want to reach to
260 the :meth:`~HTTPConnection.set_tunnel` method::
261
262 >>> import http.client
263 >>> conn = http.client.HTTPSConnection("localhost", 8080)
264 >>> conn.set_tunnel("www.python.org")
265 >>> conn.request("HEAD","/index.html")
Senthil Kumaran7e5229c2009-12-20 07:31:21 +0000266
Senthil Kumaran2e910fd2009-07-25 04:27:38 +0000267 .. versionadded:: 3.2
Georg Brandl116aa622007-08-15 14:28:22 +0000268
Georg Brandl67b21b72010-08-17 15:07:14 +0000269
Georg Brandl116aa622007-08-15 14:28:22 +0000270.. method:: HTTPConnection.connect()
271
272 Connect to the server specified when the object was created.
273
274
275.. method:: HTTPConnection.close()
276
277 Close the connection to the server.
278
279As an alternative to using the :meth:`request` method described above, you can
280also send your request step by step, by using the four functions below.
281
282
Georg Brandl036490d2009-05-17 13:00:36 +0000283.. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
Georg Brandl116aa622007-08-15 14:28:22 +0000284
285 This should be the first call after the connection to the server has been made.
286 It sends a line to the server consisting of the *request* string, the *selector*
287 string, and the HTTP version (``HTTP/1.1``). To disable automatic sending of
288 ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional
289 content encodings), specify *skip_host* or *skip_accept_encoding* with non-False
290 values.
291
Georg Brandl116aa622007-08-15 14:28:22 +0000292
293.. method:: HTTPConnection.putheader(header, argument[, ...])
294
295 Send an :rfc:`822`\ -style header to the server. It sends a line to the server
296 consisting of the header, a colon and a space, and the first argument. If more
297 arguments are given, continuation lines are sent, each consisting of a tab and
298 an argument.
299
300
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800301.. method:: HTTPConnection.endheaders(message_body=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000302
Senthil Kumaran5d0de3f2011-10-03 07:27:06 +0800303 Send a blank line to the server, signalling the end of the headers. The
Senthil Kumaranad87fa62011-10-05 23:26:49 +0800304 optional *message_body* argument can be used to pass a message body
305 associated with the request. The message body will be sent in the same
306 packet as the message headers if it is string, otherwise it is sent in a
307 separate packet.
Georg Brandl116aa622007-08-15 14:28:22 +0000308
309.. method:: HTTPConnection.send(data)
310
311 Send data to the server. This should be used directly only after the
312 :meth:`endheaders` method has been called and before :meth:`getresponse` is
313 called.
314
315
316.. _httpresponse-objects:
317
318HTTPResponse Objects
319--------------------
320
Jeremy Hylton1052f892009-03-31 14:40:19 +0000321An :class:`HTTPResponse` instance wraps the HTTP response from the
322server. It provides access to the request headers and the entity
323body. The response is an iterable object and can be used in a with
324statement.
Georg Brandl116aa622007-08-15 14:28:22 +0000325
326
327.. method:: HTTPResponse.read([amt])
328
329 Reads and returns the response body, or up to the next *amt* bytes.
330
Antoine Pitrou38d96432011-12-06 22:33:57 +0100331.. method:: HTTPResponse.readinto(b)
332
333 Reads up to the next len(b) bytes of the response body into the buffer *b*.
334 Returns the number of bytes read.
335
336 .. versionadded:: 3.3
Georg Brandl116aa622007-08-15 14:28:22 +0000337
Georg Brandl036490d2009-05-17 13:00:36 +0000338.. method:: HTTPResponse.getheader(name, default=None)
Georg Brandl116aa622007-08-15 14:28:22 +0000339
Senthil Kumaran790f8312010-08-02 17:09:02 +0000340 Return the value of the header *name*, or *default* if there is no header
341 matching *name*. If there is more than one header with the name *name*,
342 return all of the values joined by ', '. If 'default' is any iterable other
343 than a single string, its elements are similarly returned joined by commas.
Georg Brandl116aa622007-08-15 14:28:22 +0000344
345
346.. method:: HTTPResponse.getheaders()
347
348 Return a list of (header, value) tuples.
349
Senthil Kumaranceff5662010-09-21 01:57:43 +0000350.. method:: HTTPResponse.fileno()
351
352 Return the ``fileno`` of the underlying socket.
Georg Brandl116aa622007-08-15 14:28:22 +0000353
354.. attribute:: HTTPResponse.msg
355
Jeremy Hylton1052f892009-03-31 14:40:19 +0000356 A :class:`http.client.HTTPMessage` instance containing the response
357 headers. :class:`http.client.HTTPMessage` is a subclass of
358 :class:`email.message.Message`.
Georg Brandl116aa622007-08-15 14:28:22 +0000359
360
361.. attribute:: HTTPResponse.version
362
363 HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
364
365
366.. attribute:: HTTPResponse.status
367
368 Status code returned by server.
369
370
371.. attribute:: HTTPResponse.reason
372
373 Reason phrase returned by server.
374
375
Jeremy Hylton1052f892009-03-31 14:40:19 +0000376.. attribute:: HTTPResponse.debuglevel
377
Georg Brandlef871f62010-03-12 10:06:40 +0000378 A debugging hook. If :attr:`debuglevel` is greater than zero, messages
Jeremy Hylton1052f892009-03-31 14:40:19 +0000379 will be printed to stdout as the response is read and parsed.
380
Senthil Kumarance9b5962011-06-19 16:56:49 -0700381.. attribute:: HTTPResponse.closed
382
Serhiy Storchakafbc1c262013-11-29 12:17:13 +0200383 Is ``True`` if the stream is closed.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000384
Georg Brandl116aa622007-08-15 14:28:22 +0000385Examples
386--------
387
388Here is an example session that uses the ``GET`` method::
389
Georg Brandl24420152008-05-26 16:32:26 +0000390 >>> import http.client
391 >>> conn = http.client.HTTPConnection("www.python.org")
Georg Brandl116aa622007-08-15 14:28:22 +0000392 >>> conn.request("GET", "/index.html")
393 >>> r1 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000394 >>> print(r1.status, r1.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000395 200 OK
Senthil Kumarance9b5962011-06-19 16:56:49 -0700396 >>> data1 = r1.read() # This will return entire content.
397 >>> # The following example demonstrates reading data in chunks.
398 >>> conn.request("GET", "/index.html")
399 >>> r1 = conn.getresponse()
400 >>> while not r1.closed:
401 ... print(r1.read(200)) # 200 bytes
402 b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"...
403 ...
404 >>> # Example of an invalid request
Georg Brandl116aa622007-08-15 14:28:22 +0000405 >>> conn.request("GET", "/parrot.spam")
406 >>> r2 = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000407 >>> print(r2.status, r2.reason)
Georg Brandl116aa622007-08-15 14:28:22 +0000408 404 Not Found
409 >>> data2 = r2.read()
410 >>> conn.close()
411
Fred Drake1587e3d2010-05-12 01:36:11 +0000412Here is an example session that uses the ``HEAD`` method. Note that the
413``HEAD`` method never returns any data. ::
Senthil Kumaran71fb6c82010-04-28 17:39:48 +0000414
415 >>> import http.client
416 >>> conn = http.client.HTTPConnection("www.python.org")
417 >>> conn.request("HEAD","/index.html")
418 >>> res = conn.getresponse()
419 >>> print(res.status, res.reason)
420 200 OK
421 >>> data = res.read()
422 >>> print(len(data))
423 0
424 >>> data == b''
425 True
426
Georg Brandl116aa622007-08-15 14:28:22 +0000427Here is an example session that shows how to ``POST`` requests::
428
Senthil Kumaranaca8fd72008-06-23 04:41:59 +0000429 >>> import http.client, urllib.parse
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800430 >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
Georg Brandl116aa622007-08-15 14:28:22 +0000431 >>> headers = {"Content-type": "application/x-www-form-urlencoded",
432 ... "Accept": "text/plain"}
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800433 >>> conn = http.client.HTTPConnection("bugs.python.org")
434 >>> conn.request("POST", "", params, headers)
Georg Brandl116aa622007-08-15 14:28:22 +0000435 >>> response = conn.getresponse()
Georg Brandl6911e3c2007-09-04 07:15:32 +0000436 >>> print(response.status, response.reason)
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800437 302 Found
Georg Brandl116aa622007-08-15 14:28:22 +0000438 >>> data = response.read()
Senthil Kumaran96c84a42011-07-20 21:56:24 +0800439 >>> data
440 b'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
Georg Brandl116aa622007-08-15 14:28:22 +0000441 >>> conn.close()
442
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700443Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The
444difference lies only the server side where HTTP server will allow resources to
Senthil Kumarane66cc812013-03-13 13:42:47 -0700445be created via ``PUT`` request. It should be noted that custom HTTP methods
446+are also handled in :class:`urllib.request.Request` by sending the appropriate
447+method attribute.Here is an example session that shows how to do ``PUT``
448request using http.client::
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700449
450 >>> # This creates an HTTP message
451 >>> # with the content of BODY as the enclosed representation
Senthil Kumaran8b4a2722014-04-16 23:33:02 -0400452 >>> # for the resource http://localhost:8080/file
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700453 ...
454 >>> import http.client
455 >>> BODY = "***filecontents***"
456 >>> conn = http.client.HTTPConnection("localhost", 8080)
457 >>> conn.request("PUT", "/file", BODY)
458 >>> response = conn.getresponse()
Georg Brandld277a562013-10-06 12:42:18 +0200459 >>> print(response.status, response.reason)
Senthil Kumaranb5fe2472013-03-13 13:38:33 -0700460 200, OK
Jeremy Hylton1052f892009-03-31 14:40:19 +0000461
462.. _httpmessage-objects:
463
464HTTPMessage Objects
465-------------------
466
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000467An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
468response. It is implemented using the :class:`email.message.Message` class.
Jeremy Hylton1052f892009-03-31 14:40:19 +0000469
Benjamin Peterson605b9d92009-04-02 00:24:00 +0000470.. XXX Define the methods that clients can depend upon between versions.