mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 18:28:49 +00:00 
			
		
		
		
	 ef871f6160
			
		
	
	
		ef871f6160
		
	
	
	
	
		
			
			svn+ssh://pythondev@svn.python.org/python/trunk ........ r78859 | georg.brandl | 2010-03-12 10:57:43 +0100 (Fr, 12 Mär 2010) | 1 line Get rid of backticks. ........ r78860 | georg.brandl | 2010-03-12 11:02:03 +0100 (Fr, 12 Mär 2010) | 1 line Fix warnings from "make check". ........
		
			
				
	
	
		
			547 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			547 lines
		
	
	
	
		
			34 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :mod:`http.client` --- HTTP protocol client
 | |
| ===========================================
 | |
| 
 | |
| .. module:: http.client
 | |
|    :synopsis: HTTP and HTTPS protocol client (requires sockets).
 | |
| 
 | |
| 
 | |
| .. index::
 | |
|    pair: HTTP; protocol
 | |
|    single: HTTP; http.client (standard module)
 | |
| 
 | |
| .. index:: module: urllib.request
 | |
| 
 | |
| This module defines classes which implement the client side of the HTTP and
 | |
| HTTPS protocols.  It is normally not used directly --- the module
 | |
| :mod:`urllib.request` uses it to handle URLs that use HTTP and HTTPS.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    HTTPS support is only available if the :mod:`socket` module was compiled with
 | |
|    SSL support.
 | |
| 
 | |
| The module provides the following classes:
 | |
| 
 | |
| 
 | |
| .. class:: HTTPConnection(host, port=None, strict=None[, timeout[, source_address]])
 | |
| 
 | |
|    An :class:`HTTPConnection` instance represents one transaction with an HTTP
 | |
|    server.  It should be instantiated passing it a host and optional port
 | |
|    number.  If no port number is passed, the port is extracted from the host
 | |
|    string if it has the form ``host:port``, else the default HTTP port (80) is
 | |
|    used.  When True, the optional parameter *strict* (which defaults to a false
 | |
|    value) causes ``BadStatusLine`` to
 | |
|    be raised if the status line can't be parsed as a valid HTTP/1.0 or 1.1
 | |
|    status line.  If the optional *timeout* parameter is given, blocking
 | |
|    operations (like connection attempts) will timeout after that many seconds
 | |
|    (if it is not given, the global default timeout setting is used).
 | |
|    The optional *source_address* parameter may be a typle of a (host, port)
 | |
|    to use as the source address the HTTP connection is made from.
 | |
| 
 | |
|    For example, the following calls all create instances that connect to the server
 | |
|    at the same host and port::
 | |
| 
 | |
|       >>> h1 = http.client.HTTPConnection('www.cwi.nl')
 | |
|       >>> h2 = http.client.HTTPConnection('www.cwi.nl:80')
 | |
|       >>> h3 = http.client.HTTPConnection('www.cwi.nl', 80)
 | |
|       >>> h3 = http.client.HTTPConnection('www.cwi.nl', 80, timeout=10)
 | |
| 
 | |
|    .. versionchanged:: 3.2
 | |
|       *source_address* was added.
 | |
| 
 | |
| 
 | |
| .. class:: HTTPSConnection(host, port=None, key_file=None, cert_file=None, strict=None[, timeout[, source_address]])
 | |
| 
 | |
|    A subclass of :class:`HTTPConnection` that uses SSL for communication with
 | |
|    secure servers.  Default port is ``443``. *key_file* is the name of a PEM
 | |
|    formatted file that contains your private key. *cert_file* is a PEM formatted
 | |
|    certificate chain file.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       This does not do any certificate verification.
 | |
| 
 | |
|    .. versionchanged:: 3.2
 | |
|       *source_address* was added.
 | |
| 
 | |
| 
 | |
| .. class:: HTTPResponse(sock, debuglevel=0, strict=0, method=None, url=None)
 | |
| 
 | |
|    Class whose instances are returned upon successful connection.  Not
 | |
|    instantiated directly by user.
 | |
| 
 | |
| 
 | |
| The following exceptions are raised as appropriate:
 | |
| 
 | |
| 
 | |
| .. exception:: HTTPException
 | |
| 
 | |
|    The base class of the other exceptions in this module.  It is a subclass of
 | |
|    :exc:`Exception`.
 | |
| 
 | |
| 
 | |
| .. exception:: NotConnected
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: InvalidURL
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`, raised if a port is given and is either
 | |
|    non-numeric or empty.
 | |
| 
 | |
| 
 | |
| .. exception:: UnknownProtocol
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: UnknownTransferEncoding
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: UnimplementedFileMode
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: IncompleteRead
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: ImproperConnectionState
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.
 | |
| 
 | |
| 
 | |
| .. exception:: CannotSendRequest
 | |
| 
 | |
|    A subclass of :exc:`ImproperConnectionState`.
 | |
| 
 | |
| 
 | |
| .. exception:: CannotSendHeader
 | |
| 
 | |
|    A subclass of :exc:`ImproperConnectionState`.
 | |
| 
 | |
| 
 | |
| .. exception:: ResponseNotReady
 | |
| 
 | |
|    A subclass of :exc:`ImproperConnectionState`.
 | |
| 
 | |
| 
 | |
| .. exception:: BadStatusLine
 | |
| 
 | |
|    A subclass of :exc:`HTTPException`.  Raised if a server responds with a HTTP
 | |
|    status code that we don't understand.
 | |
| 
 | |
| The constants defined in this module are:
 | |
| 
 | |
| 
 | |
| .. data:: HTTP_PORT
 | |
| 
 | |
|    The default port for the HTTP protocol (always ``80``).
 | |
| 
 | |
| 
 | |
| .. data:: HTTPS_PORT
 | |
| 
 | |
|    The default port for the HTTPS protocol (always ``443``).
 | |
| 
 | |
| and also the following constants for integer status codes:
 | |
| 
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | Constant                                 | Value   | Definition                                                            |
 | |
| +==========================================+=========+=======================================================================+
 | |
| | :const:`CONTINUE`                        | ``100`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.1.1                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.1>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`SWITCHING_PROTOCOLS`             | ``101`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.1.2                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.2>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`PROCESSING`                      | ``102`` | WEBDAV, `RFC 2518, Section 10.1                                       |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_102>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`OK`                              | ``200`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.1                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`CREATED`                         | ``201`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.2                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`ACCEPTED`                        | ``202`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.3                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.3>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NON_AUTHORITATIVE_INFORMATION`   | ``203`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.4                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.4>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NO_CONTENT`                      | ``204`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.5                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.5>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`RESET_CONTENT`                   | ``205`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.6                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.6>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`PARTIAL_CONTENT`                 | ``206`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.2.7                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.7>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`MULTI_STATUS`                    | ``207`` | WEBDAV `RFC 2518, Section 10.2                                        |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_207>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`IM_USED`                         | ``226`` | Delta encoding in HTTP,                                               |
 | |
| |                                          |         | :rfc:`3229`, Section 10.4.1                                           |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`MULTIPLE_CHOICES`                | ``300`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.1                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`MOVED_PERMANENTLY`               | ``301`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.2                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`FOUND`                           | ``302`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.3                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`SEE_OTHER`                       | ``303`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.4                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NOT_MODIFIED`                    | ``304`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.5                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`USE_PROXY`                       | ``305`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.6                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.6>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`TEMPORARY_REDIRECT`              | ``307`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.3.8                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.8>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`BAD_REQUEST`                     | ``400`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.1                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`UNAUTHORIZED`                    | ``401`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.2                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`PAYMENT_REQUIRED`                | ``402`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.3                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.3>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`FORBIDDEN`                       | ``403`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.4                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NOT_FOUND`                       | ``404`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.5                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`METHOD_NOT_ALLOWED`              | ``405`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.6                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NOT_ACCEPTABLE`                  | ``406`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.7                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.7>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`PROXY_AUTHENTICATION_REQUIRED`   | ``407`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.8                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.8>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`REQUEST_TIMEOUT`                 | ``408`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.9                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.9>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`CONFLICT`                        | ``409`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.10                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`GONE`                            | ``410`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.11                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.11>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`LENGTH_REQUIRED`                 | ``411`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.12                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.12>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`PRECONDITION_FAILED`             | ``412`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.13                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.13>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`REQUEST_ENTITY_TOO_LARGE`        | ``413`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.14                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.14>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`REQUEST_URI_TOO_LONG`            | ``414`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.15                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.15>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`UNSUPPORTED_MEDIA_TYPE`          | ``415`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.16                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.16>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`REQUESTED_RANGE_NOT_SATISFIABLE` | ``416`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.17                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.17>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`EXPECTATION_FAILED`              | ``417`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.4.18                                                               |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.18>`_ |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`UNPROCESSABLE_ENTITY`            | ``422`` | WEBDAV, `RFC 2518, Section 10.3                                       |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_422>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`LOCKED`                          | ``423`` | WEBDAV `RFC 2518, Section 10.4                                        |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_423>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`FAILED_DEPENDENCY`               | ``424`` | WEBDAV, `RFC 2518, Section 10.5                                       |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_424>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`UPGRADE_REQUIRED`                | ``426`` | HTTP Upgrade to TLS,                                                  |
 | |
| |                                          |         | :rfc:`2817`, Section 6                                                |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`INTERNAL_SERVER_ERROR`           | ``500`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.5.1                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NOT_IMPLEMENTED`                 | ``501`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.5.2                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.2>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`BAD_GATEWAY`                     | ``502`` | HTTP/1.1 `RFC 2616, Section                                           |
 | |
| |                                          |         | 10.5.3                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.3>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`SERVICE_UNAVAILABLE`             | ``503`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.5.4                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.4>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`GATEWAY_TIMEOUT`                 | ``504`` | HTTP/1.1 `RFC 2616, Section                                           |
 | |
| |                                          |         | 10.5.5                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`HTTP_VERSION_NOT_SUPPORTED`      | ``505`` | HTTP/1.1, `RFC 2616, Section                                          |
 | |
| |                                          |         | 10.5.6                                                                |
 | |
| |                                          |         | <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.6>`_  |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`INSUFFICIENT_STORAGE`            | ``507`` | WEBDAV, `RFC 2518, Section 10.6                                       |
 | |
| |                                          |         | <http://www.webdav.org/specs/rfc2518.html#STATUS_507>`_               |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| | :const:`NOT_EXTENDED`                    | ``510`` | An HTTP Extension Framework,                                          |
 | |
| |                                          |         | :rfc:`2774`, Section 7                                                |
 | |
| +------------------------------------------+---------+-----------------------------------------------------------------------+
 | |
| 
 | |
| 
 | |
| .. data:: responses
 | |
| 
 | |
|    This dictionary maps the HTTP 1.1 status codes to the W3C names.
 | |
| 
 | |
|    Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not Found'``.
 | |
| 
 | |
| 
 | |
| .. _httpconnection-objects:
 | |
| 
 | |
| HTTPConnection Objects
 | |
| ----------------------
 | |
| 
 | |
| :class:`HTTPConnection` instances have the following methods:
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.request(method, url, body=None, headers={})
 | |
| 
 | |
|    This will send a request to the server using the HTTP request
 | |
|    method *method* and the selector *url*.  If the *body* argument is
 | |
|    present, it should be string or bytes object of data to send after
 | |
|    the headers are finished.  Strings are encoded as ISO-8859-1, the
 | |
|    default charset for HTTP.  To use other encodings, pass a bytes
 | |
|    object.  The Content-Length header is set to the length of the
 | |
|    string.
 | |
| 
 | |
|    The *body* may also be an open file object, in which case the
 | |
|    contents of the file is sent; this file object should support
 | |
|    ``fileno()`` and ``read()`` methods. The header Content-Length is
 | |
|    automatically set to the length of the file as reported by
 | |
|    stat.
 | |
| 
 | |
|    The *headers* argument should be a mapping of extra HTTP
 | |
|    headers to send with the request.
 | |
| 
 | |
| .. method:: HTTPConnection.getresponse()
 | |
| 
 | |
|    Should be called after a request is sent to get the response from the server.
 | |
|    Returns an :class:`HTTPResponse` instance.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       Note that you must have read the whole response before you can send a new
 | |
|       request to the server.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.set_debuglevel(level)
 | |
| 
 | |
|    Set the debugging level (the amount of debugging output printed). The default
 | |
|    debug level is ``0``, meaning no debugging output is printed.
 | |
| 
 | |
|    .. versionadded:: 3.1
 | |
| 
 | |
| .. method:: HTTPConnection.set_tunnel(host, port=None, headers=None)
 | |
| 
 | |
|    Set the host and the port for HTTP Connect Tunnelling. Normally used when it
 | |
|    is required to a HTTPS Connection through a proxy server.
 | |
| 
 | |
|    The headers argument should be a mapping of extra HTTP headers to to sent
 | |
|    with the CONNECT request.
 | |
| 
 | |
|    .. versionadded:: 3.2
 | |
| 
 | |
| .. method:: HTTPConnection.connect()
 | |
| 
 | |
|    Connect to the server specified when the object was created.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.close()
 | |
| 
 | |
|    Close the connection to the server.
 | |
| 
 | |
| As an alternative to using the :meth:`request` method described above, you can
 | |
| also send your request step by step, by using the four functions below.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.putrequest(request, selector, skip_host=False, skip_accept_encoding=False)
 | |
| 
 | |
|    This should be the first call after the connection to the server has been made.
 | |
|    It sends a line to the server consisting of the *request* string, the *selector*
 | |
|    string, and the HTTP version (``HTTP/1.1``).  To disable automatic sending of
 | |
|    ``Host:`` or ``Accept-Encoding:`` headers (for example to accept additional
 | |
|    content encodings), specify *skip_host* or *skip_accept_encoding* with non-False
 | |
|    values.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.putheader(header, argument[, ...])
 | |
| 
 | |
|    Send an :rfc:`822`\ -style header to the server.  It sends a line to the server
 | |
|    consisting of the header, a colon and a space, and the first argument.  If more
 | |
|    arguments are given, continuation lines are sent, each consisting of a tab and
 | |
|    an argument.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.endheaders()
 | |
| 
 | |
|    Send a blank line to the server, signalling the end of the headers.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPConnection.send(data)
 | |
| 
 | |
|    Send data to the server.  This should be used directly only after the
 | |
|    :meth:`endheaders` method has been called and before :meth:`getresponse` is
 | |
|    called.
 | |
| 
 | |
| 
 | |
| .. _httpresponse-objects:
 | |
| 
 | |
| HTTPResponse Objects
 | |
| --------------------
 | |
| 
 | |
| An :class:`HTTPResponse` instance wraps the HTTP response from the
 | |
| server.  It provides access to the request headers and the entity
 | |
| body.  The response is an iterable object and can be used in a with
 | |
| statement.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPResponse.read([amt])
 | |
| 
 | |
|    Reads and returns the response body, or up to the next *amt* bytes.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPResponse.getheader(name, default=None)
 | |
| 
 | |
|    Get the contents of the header *name*, or *default* if there is no matching
 | |
|    header.
 | |
| 
 | |
| 
 | |
| .. method:: HTTPResponse.getheaders()
 | |
| 
 | |
|    Return a list of (header, value) tuples.
 | |
| 
 | |
| 
 | |
| .. attribute:: HTTPResponse.msg
 | |
| 
 | |
|    A :class:`http.client.HTTPMessage` instance containing the response
 | |
|    headers.  :class:`http.client.HTTPMessage` is a subclass of
 | |
|    :class:`email.message.Message`.
 | |
| 
 | |
| 
 | |
| .. attribute:: HTTPResponse.version
 | |
| 
 | |
|    HTTP protocol version used by server.  10 for HTTP/1.0, 11 for HTTP/1.1.
 | |
| 
 | |
| 
 | |
| .. attribute:: HTTPResponse.status
 | |
| 
 | |
|    Status code returned by server.
 | |
| 
 | |
| 
 | |
| .. attribute:: HTTPResponse.reason
 | |
| 
 | |
|    Reason phrase returned by server.
 | |
| 
 | |
| 
 | |
| .. attribute:: HTTPResponse.debuglevel
 | |
| 
 | |
|    A debugging hook.  If :attr:`debuglevel` is greater than zero, messages
 | |
|    will be printed to stdout as the response is read and parsed.
 | |
| 
 | |
| 
 | |
| Examples
 | |
| --------
 | |
| 
 | |
| Here is an example session that uses the ``GET`` method::
 | |
| 
 | |
|    >>> import http.client
 | |
|    >>> conn = http.client.HTTPConnection("www.python.org")
 | |
|    >>> conn.request("GET", "/index.html")
 | |
|    >>> r1 = conn.getresponse()
 | |
|    >>> print(r1.status, r1.reason)
 | |
|    200 OK
 | |
|    >>> data1 = r1.read()
 | |
|    >>> conn.request("GET", "/parrot.spam")
 | |
|    >>> r2 = conn.getresponse()
 | |
|    >>> print(r2.status, r2.reason)
 | |
|    404 Not Found
 | |
|    >>> data2 = r2.read()
 | |
|    >>> conn.close()
 | |
| 
 | |
| Here is an example session that shows how to ``POST`` requests::
 | |
| 
 | |
|    >>> import http.client, urllib.parse
 | |
|    >>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
 | |
|    >>> headers = {"Content-type": "application/x-www-form-urlencoded",
 | |
|    ...            "Accept": "text/plain"}
 | |
|    >>> conn = http.client.HTTPConnection("musi-cal.mojam.com:80")
 | |
|    >>> conn.request("POST", "/cgi-bin/query", params, headers)
 | |
|    >>> response = conn.getresponse()
 | |
|    >>> print(response.status, response.reason)
 | |
|    200 OK
 | |
|    >>> data = response.read()
 | |
|    >>> conn.close()
 | |
| 
 | |
| 
 | |
| .. _httpmessage-objects:
 | |
| 
 | |
| HTTPMessage Objects
 | |
| -------------------
 | |
| 
 | |
| An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP
 | |
| response.  It is implemented using the :class:`email.message.Message` class.
 | |
| 
 | |
| .. XXX Define the methods that clients can depend upon between versions.
 |