17db96d56Sopenharmony_ci:mod:`urllib.request` --- Extensible library for opening URLs
27db96d56Sopenharmony_ci=============================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: urllib.request
57db96d56Sopenharmony_ci   :synopsis: Extensible library for opening URLs.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Jeremy Hylton <jeremy@alum.mit.edu>
87db96d56Sopenharmony_ci.. sectionauthor:: Moshe Zadka <moshez@users.sourceforge.net>
97db96d56Sopenharmony_ci.. sectionauthor:: Senthil Kumaran <senthil@uthcode.com>
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci**Source code:** :source:`Lib/urllib/request.py`
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci--------------
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciThe :mod:`urllib.request` module defines functions and classes which help in
167db96d56Sopenharmony_ciopening URLs (mostly HTTP) in a complex world --- basic and digest
177db96d56Sopenharmony_ciauthentication, redirections, cookies and more.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. seealso::
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci    The `Requests package <https://requests.readthedocs.io/en/master/>`_
227db96d56Sopenharmony_ci    is recommended for a higher-level HTTP client interface.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciThe :mod:`urllib.request` module defines the following functions:
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci.. function:: urlopen(url, data=None[, timeout], *, cafile=None, capath=None, cadefault=False, context=None)
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   Open *url*, which can be either a string containing a valid, properly
327db96d56Sopenharmony_ci   encoded URL, or a :class:`Request` object.
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci   *data* must be an object specifying additional data to be sent to the
357db96d56Sopenharmony_ci   server, or ``None`` if no such data is needed.  See :class:`Request`
367db96d56Sopenharmony_ci   for details.
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci   urllib.request module uses HTTP/1.1 and includes ``Connection:close`` header
397db96d56Sopenharmony_ci   in its HTTP requests.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   The optional *timeout* parameter specifies a timeout in seconds for
427db96d56Sopenharmony_ci   blocking operations like the connection attempt (if not specified,
437db96d56Sopenharmony_ci   the global default timeout setting will be used).  This actually
447db96d56Sopenharmony_ci   only works for HTTP, HTTPS and FTP connections.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci   If *context* is specified, it must be a :class:`ssl.SSLContext` instance
477db96d56Sopenharmony_ci   describing the various SSL options. See :class:`~http.client.HTTPSConnection`
487db96d56Sopenharmony_ci   for more details.
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci   The optional *cafile* and *capath* parameters specify a set of trusted
517db96d56Sopenharmony_ci   CA certificates for HTTPS requests.  *cafile* should point to a single
527db96d56Sopenharmony_ci   file containing a bundle of CA certificates, whereas *capath* should
537db96d56Sopenharmony_ci   point to a directory of hashed certificate files.  More information can
547db96d56Sopenharmony_ci   be found in :meth:`ssl.SSLContext.load_verify_locations`.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   The *cadefault* parameter is ignored.
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   This function always returns an object which can work as a
597db96d56Sopenharmony_ci   :term:`context manager` and has the properties *url*, *headers*, and *status*.
607db96d56Sopenharmony_ci   See :class:`urllib.response.addinfourl` for more detail on these properties.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci   For HTTP and HTTPS URLs, this function returns a
637db96d56Sopenharmony_ci   :class:`http.client.HTTPResponse` object slightly modified. In addition
647db96d56Sopenharmony_ci   to the three new methods above, the msg attribute contains the
657db96d56Sopenharmony_ci   same information as the :attr:`~http.client.HTTPResponse.reason`
667db96d56Sopenharmony_ci   attribute --- the reason phrase returned by server --- instead of
677db96d56Sopenharmony_ci   the response headers as it is specified in the documentation for
687db96d56Sopenharmony_ci   :class:`~http.client.HTTPResponse`.
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   For FTP, file, and data URLs and requests explicitly handled by legacy
717db96d56Sopenharmony_ci   :class:`URLopener` and :class:`FancyURLopener` classes, this function
727db96d56Sopenharmony_ci   returns a :class:`urllib.response.addinfourl` object.
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Raises :exc:`~urllib.error.URLError` on protocol errors.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci   Note that ``None`` may be returned if no handler handles the request (though
777db96d56Sopenharmony_ci   the default installed global :class:`OpenerDirector` uses
787db96d56Sopenharmony_ci   :class:`UnknownHandler` to ensure this never happens).
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci   In addition, if proxy settings are detected (for example, when a ``*_proxy``
817db96d56Sopenharmony_ci   environment variable like :envvar:`http_proxy` is set),
827db96d56Sopenharmony_ci   :class:`ProxyHandler` is default installed and makes sure the requests are
837db96d56Sopenharmony_ci   handled through the proxy.
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   The legacy ``urllib.urlopen`` function from Python 2.6 and earlier has been
867db96d56Sopenharmony_ci   discontinued; :func:`urllib.request.urlopen` corresponds to the old
877db96d56Sopenharmony_ci   ``urllib2.urlopen``.  Proxy handling, which was done by passing a dictionary
887db96d56Sopenharmony_ci   parameter to ``urllib.urlopen``, can be obtained by using
897db96d56Sopenharmony_ci   :class:`ProxyHandler` objects.
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci   .. audit-event:: urllib.Request fullurl,data,headers,method urllib.request.urlopen
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci      The default opener raises an :ref:`auditing event <auditing>`
947db96d56Sopenharmony_ci      ``urllib.Request`` with arguments ``fullurl``, ``data``, ``headers``,
957db96d56Sopenharmony_ci      ``method`` taken from the request object.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci   .. versionchanged:: 3.2
987db96d56Sopenharmony_ci      *cafile* and *capath* were added.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   .. versionchanged:: 3.2
1017db96d56Sopenharmony_ci      HTTPS virtual hosts are now supported if possible (that is, if
1027db96d56Sopenharmony_ci      :data:`ssl.HAS_SNI` is true).
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   .. versionadded:: 3.2
1057db96d56Sopenharmony_ci      *data* can be an iterable object.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci   .. versionchanged:: 3.3
1087db96d56Sopenharmony_ci      *cadefault* was added.
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci   .. versionchanged:: 3.4.3
1117db96d56Sopenharmony_ci      *context* was added.
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1147db96d56Sopenharmony_ci      HTTPS connection now send an ALPN extension with protocol indicator
1157db96d56Sopenharmony_ci      ``http/1.1`` when no *context* is given. Custom *context* should set
1167db96d56Sopenharmony_ci      ALPN protocols with :meth:`~ssl.SSLContext.set_alpn_protocol`.
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci   .. deprecated:: 3.6
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci       *cafile*, *capath* and *cadefault* are deprecated in favor of *context*.
1217db96d56Sopenharmony_ci       Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let
1227db96d56Sopenharmony_ci       :func:`ssl.create_default_context` select the system's trusted CA
1237db96d56Sopenharmony_ci       certificates for you.
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci.. function:: install_opener(opener)
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   Install an :class:`OpenerDirector` instance as the default global opener.
1297db96d56Sopenharmony_ci   Installing an opener is only necessary if you want urlopen to use that
1307db96d56Sopenharmony_ci   opener; otherwise, simply call :meth:`OpenerDirector.open` instead of
1317db96d56Sopenharmony_ci   :func:`~urllib.request.urlopen`.  The code does not check for a real
1327db96d56Sopenharmony_ci   :class:`OpenerDirector`, and any class with the appropriate interface will
1337db96d56Sopenharmony_ci   work.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci.. function:: build_opener([handler, ...])
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   Return an :class:`OpenerDirector` instance, which chains the handlers in the
1397db96d56Sopenharmony_ci   order given. *handler*\s can be either instances of :class:`BaseHandler`, or
1407db96d56Sopenharmony_ci   subclasses of :class:`BaseHandler` (in which case it must be possible to call
1417db96d56Sopenharmony_ci   the constructor without any parameters).  Instances of the following classes
1427db96d56Sopenharmony_ci   will be in front of the *handler*\s, unless the *handler*\s contain them,
1437db96d56Sopenharmony_ci   instances of them or subclasses of them: :class:`ProxyHandler` (if proxy
1447db96d56Sopenharmony_ci   settings are detected), :class:`UnknownHandler`, :class:`HTTPHandler`,
1457db96d56Sopenharmony_ci   :class:`HTTPDefaultErrorHandler`, :class:`HTTPRedirectHandler`,
1467db96d56Sopenharmony_ci   :class:`FTPHandler`, :class:`FileHandler`, :class:`HTTPErrorProcessor`.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci   If the Python installation has SSL support (i.e., if the :mod:`ssl` module
1497db96d56Sopenharmony_ci   can be imported), :class:`HTTPSHandler` will also be added.
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   A :class:`BaseHandler` subclass may also change its :attr:`handler_order`
1527db96d56Sopenharmony_ci   attribute to modify its position in the handlers list.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci.. function:: pathname2url(path)
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci   Convert the pathname *path* from the local syntax for a path to the form used in
1587db96d56Sopenharmony_ci   the path component of a URL.  This does not produce a complete URL.  The return
1597db96d56Sopenharmony_ci   value will already be quoted using the :func:`~urllib.parse.quote` function.
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci.. function:: url2pathname(path)
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci   Convert the path component *path* from a percent-encoded URL to the local syntax for a
1657db96d56Sopenharmony_ci   path.  This does not accept a complete URL.  This function uses
1667db96d56Sopenharmony_ci   :func:`~urllib.parse.unquote` to decode *path*.
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci.. function:: getproxies()
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci   This helper function returns a dictionary of scheme to proxy server URL
1717db96d56Sopenharmony_ci   mappings. It scans the environment for variables named ``<scheme>_proxy``,
1727db96d56Sopenharmony_ci   in a case insensitive approach, for all operating systems first, and when it
1737db96d56Sopenharmony_ci   cannot find it, looks for proxy information from System
1747db96d56Sopenharmony_ci   Configuration for macOS and Windows Systems Registry for Windows.
1757db96d56Sopenharmony_ci   If both lowercase and uppercase environment variables exist (and disagree),
1767db96d56Sopenharmony_ci   lowercase is preferred.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   .. note::
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci      If the environment variable ``REQUEST_METHOD`` is set, which usually
1817db96d56Sopenharmony_ci      indicates your script is running in a CGI environment, the environment
1827db96d56Sopenharmony_ci      variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is
1837db96d56Sopenharmony_ci      because that variable can be injected by a client using the "Proxy:" HTTP
1847db96d56Sopenharmony_ci      header. If you need to use an HTTP proxy in a CGI environment, either use
1857db96d56Sopenharmony_ci      ``ProxyHandler`` explicitly, or make sure the variable name is in
1867db96d56Sopenharmony_ci      lowercase (or at least the ``_proxy`` suffix).
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ciThe following classes are provided:
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci.. class:: Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci   This class is an abstraction of a URL request.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   *url* should be a string containing a valid, properly encoded URL.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   *data* must be an object specifying additional data to send to the
1987db96d56Sopenharmony_ci   server, or ``None`` if no such data is needed.  Currently HTTP
1997db96d56Sopenharmony_ci   requests are the only ones that use *data*.  The supported object
2007db96d56Sopenharmony_ci   types include bytes, file-like objects, and iterables of bytes-like objects.
2017db96d56Sopenharmony_ci   If no ``Content-Length`` nor ``Transfer-Encoding`` header field
2027db96d56Sopenharmony_ci   has been provided, :class:`HTTPHandler` will set these headers according
2037db96d56Sopenharmony_ci   to the type of *data*.  ``Content-Length`` will be used to send
2047db96d56Sopenharmony_ci   bytes objects, while ``Transfer-Encoding: chunked`` as specified in
2057db96d56Sopenharmony_ci   :rfc:`7230`, Section 3.3.1 will be used to send files and other iterables.
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci   For an HTTP POST request method, *data* should be a buffer in the
2087db96d56Sopenharmony_ci   standard :mimetype:`application/x-www-form-urlencoded` format.  The
2097db96d56Sopenharmony_ci   :func:`urllib.parse.urlencode` function takes a mapping or sequence
2107db96d56Sopenharmony_ci   of 2-tuples and returns an ASCII string in this format. It should
2117db96d56Sopenharmony_ci   be encoded to bytes before being used as the *data* parameter.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   *headers* should be a dictionary, and will be treated as if
2147db96d56Sopenharmony_ci   :meth:`add_header` was called with each key and value as arguments.
2157db96d56Sopenharmony_ci   This is often used to "spoof" the ``User-Agent`` header value, which is
2167db96d56Sopenharmony_ci   used by a browser to identify itself -- some HTTP servers only
2177db96d56Sopenharmony_ci   allow requests coming from common browsers as opposed to scripts.
2187db96d56Sopenharmony_ci   For example, Mozilla Firefox may identify itself as ``"Mozilla/5.0
2197db96d56Sopenharmony_ci   (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11"``, while
2207db96d56Sopenharmony_ci   :mod:`urllib`'s default user agent string is
2217db96d56Sopenharmony_ci   ``"Python-urllib/2.6"`` (on Python 2.6).
2227db96d56Sopenharmony_ci   All header keys are sent in camel case.
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci   An appropriate ``Content-Type`` header should be included if the *data*
2257db96d56Sopenharmony_ci   argument is present.  If this header has not been provided and *data*
2267db96d56Sopenharmony_ci   is not None, ``Content-Type: application/x-www-form-urlencoded`` will
2277db96d56Sopenharmony_ci   be added as a default.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci   The next two arguments are only of interest for correct handling
2307db96d56Sopenharmony_ci   of third-party HTTP cookies:
2317db96d56Sopenharmony_ci
2327db96d56Sopenharmony_ci   *origin_req_host* should be the request-host of the origin
2337db96d56Sopenharmony_ci   transaction, as defined by :rfc:`2965`.  It defaults to
2347db96d56Sopenharmony_ci   ``http.cookiejar.request_host(self)``.  This is the host name or IP
2357db96d56Sopenharmony_ci   address of the original request that was initiated by the user.
2367db96d56Sopenharmony_ci   For example, if the request is for an image in an HTML document,
2377db96d56Sopenharmony_ci   this should be the request-host of the request for the page
2387db96d56Sopenharmony_ci   containing the image.
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci   *unverifiable* should indicate whether the request is unverifiable,
2417db96d56Sopenharmony_ci   as defined by :rfc:`2965`.  It defaults to ``False``.  An unverifiable
2427db96d56Sopenharmony_ci   request is one whose URL the user did not have the option to
2437db96d56Sopenharmony_ci   approve.  For example, if the request is for an image in an HTML
2447db96d56Sopenharmony_ci   document, and the user had no option to approve the automatic
2457db96d56Sopenharmony_ci   fetching of the image, this should be true.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   *method* should be a string that indicates the HTTP request method that
2487db96d56Sopenharmony_ci   will be used (e.g. ``'HEAD'``).  If provided, its value is stored in the
2497db96d56Sopenharmony_ci   :attr:`~Request.method` attribute and is used by :meth:`get_method()`.
2507db96d56Sopenharmony_ci   The default is ``'GET'`` if *data* is ``None`` or ``'POST'`` otherwise.
2517db96d56Sopenharmony_ci   Subclasses may indicate a different default method by setting the
2527db96d56Sopenharmony_ci   :attr:`~Request.method` attribute in the class itself.
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci   .. note::
2557db96d56Sopenharmony_ci      The request will not work as expected if the data object is unable
2567db96d56Sopenharmony_ci      to deliver its content more than once (e.g. a file or an iterable
2577db96d56Sopenharmony_ci      that can produce the content only once) and the request is retried
2587db96d56Sopenharmony_ci      for HTTP redirects or authentication.  The *data* is sent to the
2597db96d56Sopenharmony_ci      HTTP server right away after the headers.  There is no support for
2607db96d56Sopenharmony_ci      a 100-continue expectation in the library.
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2637db96d56Sopenharmony_ci      :attr:`Request.method` argument is added to the Request class.
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci   .. versionchanged:: 3.4
2667db96d56Sopenharmony_ci      Default :attr:`Request.method` may be indicated at the class level.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   .. versionchanged:: 3.6
2697db96d56Sopenharmony_ci      Do not raise an error if the ``Content-Length`` has not been
2707db96d56Sopenharmony_ci      provided and *data* is neither ``None`` nor a bytes object.
2717db96d56Sopenharmony_ci      Fall back to use chunked transfer encoding instead.
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci.. class:: OpenerDirector()
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   The :class:`OpenerDirector` class opens URLs via :class:`BaseHandler`\ s chained
2767db96d56Sopenharmony_ci   together. It manages the chaining of handlers, and recovery from errors.
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci.. class:: BaseHandler()
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   This is the base class for all registered handlers --- and handles only the
2827db96d56Sopenharmony_ci   simple mechanics of registration.
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci.. class:: HTTPDefaultErrorHandler()
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci   A class which defines a default handler for HTTP error responses; all responses
2887db96d56Sopenharmony_ci   are turned into :exc:`~urllib.error.HTTPError` exceptions.
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci.. class:: HTTPRedirectHandler()
2927db96d56Sopenharmony_ci
2937db96d56Sopenharmony_ci   A class to handle redirections.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ci.. class:: HTTPCookieProcessor(cookiejar=None)
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci   A class to handle HTTP Cookies.
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci.. class:: ProxyHandler(proxies=None)
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ci   Cause requests to go through a proxy. If *proxies* is given, it must be a
3047db96d56Sopenharmony_ci   dictionary mapping protocol names to URLs of proxies. The default is to read
3057db96d56Sopenharmony_ci   the list of proxies from the environment variables
3067db96d56Sopenharmony_ci   ``<protocol>_proxy``.  If no proxy environment variables are set, then
3077db96d56Sopenharmony_ci   in a Windows environment proxy settings are obtained from the registry's
3087db96d56Sopenharmony_ci   Internet Settings section, and in a macOS environment proxy information
3097db96d56Sopenharmony_ci   is retrieved from the System Configuration Framework.
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ci   To disable autodetected proxy pass an empty dictionary.
3127db96d56Sopenharmony_ci
3137db96d56Sopenharmony_ci   The :envvar:`no_proxy` environment variable can be used to specify hosts
3147db96d56Sopenharmony_ci   which shouldn't be reached via proxy; if set, it should be a comma-separated
3157db96d56Sopenharmony_ci   list of hostname suffixes, optionally with ``:port`` appended, for example
3167db96d56Sopenharmony_ci   ``cern.ch,ncsa.uiuc.edu,some.host:8080``.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci    .. note::
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_ci       ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set;
3217db96d56Sopenharmony_ci       see the documentation on :func:`~urllib.request.getproxies`.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci
3247db96d56Sopenharmony_ci.. class:: HTTPPasswordMgr()
3257db96d56Sopenharmony_ci
3267db96d56Sopenharmony_ci   Keep a database of  ``(realm, uri) -> (user, password)`` mappings.
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci.. class:: HTTPPasswordMgrWithDefaultRealm()
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci   Keep a database of  ``(realm, uri) -> (user, password)`` mappings. A realm of
3327db96d56Sopenharmony_ci   ``None`` is considered a catch-all realm, which is searched if no other realm
3337db96d56Sopenharmony_ci   fits.
3347db96d56Sopenharmony_ci
3357db96d56Sopenharmony_ci
3367db96d56Sopenharmony_ci.. class:: HTTPPasswordMgrWithPriorAuth()
3377db96d56Sopenharmony_ci
3387db96d56Sopenharmony_ci   A variant of :class:`HTTPPasswordMgrWithDefaultRealm` that also has a
3397db96d56Sopenharmony_ci   database of ``uri -> is_authenticated`` mappings.  Can be used by a
3407db96d56Sopenharmony_ci   BasicAuth handler to determine when to send authentication credentials
3417db96d56Sopenharmony_ci   immediately instead of waiting for a ``401`` response first.
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   .. versionadded:: 3.5
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci
3467db96d56Sopenharmony_ci.. class:: AbstractBasicAuthHandler(password_mgr=None)
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci   This is a mixin class that helps with HTTP authentication, both to the remote
3497db96d56Sopenharmony_ci   host and to a proxy. *password_mgr*, if given, should be something that is
3507db96d56Sopenharmony_ci   compatible with :class:`HTTPPasswordMgr`; refer to section
3517db96d56Sopenharmony_ci   :ref:`http-password-mgr` for information on the interface that must be
3527db96d56Sopenharmony_ci   supported.  If *passwd_mgr* also provides ``is_authenticated`` and
3537db96d56Sopenharmony_ci   ``update_authenticated`` methods (see
3547db96d56Sopenharmony_ci   :ref:`http-password-mgr-with-prior-auth`), then the handler will use the
3557db96d56Sopenharmony_ci   ``is_authenticated`` result for a given URI to determine whether or not to
3567db96d56Sopenharmony_ci   send authentication credentials with the request.  If ``is_authenticated``
3577db96d56Sopenharmony_ci   returns ``True`` for the URI, credentials are sent.  If ``is_authenticated``
3587db96d56Sopenharmony_ci   is ``False``, credentials are not sent, and then if a ``401`` response is
3597db96d56Sopenharmony_ci   received the request is re-sent with the authentication credentials.  If
3607db96d56Sopenharmony_ci   authentication succeeds, ``update_authenticated`` is called to set
3617db96d56Sopenharmony_ci   ``is_authenticated`` ``True`` for the URI, so that subsequent requests to
3627db96d56Sopenharmony_ci   the URI or any of its super-URIs will automatically include the
3637db96d56Sopenharmony_ci   authentication credentials.
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci   .. versionadded:: 3.5
3667db96d56Sopenharmony_ci      Added ``is_authenticated`` support.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci.. class:: HTTPBasicAuthHandler(password_mgr=None)
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci   Handle authentication with the remote host. *password_mgr*, if given, should
3727db96d56Sopenharmony_ci   be something that is compatible with :class:`HTTPPasswordMgr`; refer to
3737db96d56Sopenharmony_ci   section :ref:`http-password-mgr` for information on the interface that must
3747db96d56Sopenharmony_ci   be supported. HTTPBasicAuthHandler will raise a :exc:`ValueError` when
3757db96d56Sopenharmony_ci   presented with a wrong Authentication scheme.
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci.. class:: ProxyBasicAuthHandler(password_mgr=None)
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   Handle authentication with the proxy. *password_mgr*, if given, should be
3817db96d56Sopenharmony_ci   something that is compatible with :class:`HTTPPasswordMgr`; refer to section
3827db96d56Sopenharmony_ci   :ref:`http-password-mgr` for information on the interface that must be
3837db96d56Sopenharmony_ci   supported.
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci
3867db96d56Sopenharmony_ci.. class:: AbstractDigestAuthHandler(password_mgr=None)
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci   This is a mixin class that helps with HTTP authentication, both to the remote
3897db96d56Sopenharmony_ci   host and to a proxy. *password_mgr*, if given, should be something that is
3907db96d56Sopenharmony_ci   compatible with :class:`HTTPPasswordMgr`; refer to section
3917db96d56Sopenharmony_ci   :ref:`http-password-mgr` for information on the interface that must be
3927db96d56Sopenharmony_ci   supported.
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci.. class:: HTTPDigestAuthHandler(password_mgr=None)
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   Handle authentication with the remote host. *password_mgr*, if given, should
3987db96d56Sopenharmony_ci   be something that is compatible with :class:`HTTPPasswordMgr`; refer to
3997db96d56Sopenharmony_ci   section :ref:`http-password-mgr` for information on the interface that must
4007db96d56Sopenharmony_ci   be supported. When both Digest Authentication Handler and Basic
4017db96d56Sopenharmony_ci   Authentication Handler are both added, Digest Authentication is always tried
4027db96d56Sopenharmony_ci   first. If the Digest Authentication returns a 40x response again, it is sent
4037db96d56Sopenharmony_ci   to Basic Authentication handler to Handle.  This Handler method will raise a
4047db96d56Sopenharmony_ci   :exc:`ValueError` when presented with an authentication scheme other than
4057db96d56Sopenharmony_ci   Digest or Basic.
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   .. versionchanged:: 3.3
4087db96d56Sopenharmony_ci      Raise :exc:`ValueError` on unsupported Authentication Scheme.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci.. class:: ProxyDigestAuthHandler(password_mgr=None)
4137db96d56Sopenharmony_ci
4147db96d56Sopenharmony_ci   Handle authentication with the proxy. *password_mgr*, if given, should be
4157db96d56Sopenharmony_ci   something that is compatible with :class:`HTTPPasswordMgr`; refer to section
4167db96d56Sopenharmony_ci   :ref:`http-password-mgr` for information on the interface that must be
4177db96d56Sopenharmony_ci   supported.
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci.. class:: HTTPHandler()
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci   A class to handle opening of HTTP URLs.
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci.. class:: HTTPSHandler(debuglevel=0, context=None, check_hostname=None)
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci   A class to handle opening of HTTPS URLs.  *context* and *check_hostname*
4287db96d56Sopenharmony_ci   have the same meaning as in :class:`http.client.HTTPSConnection`.
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   .. versionchanged:: 3.2
4317db96d56Sopenharmony_ci      *context* and *check_hostname* were added.
4327db96d56Sopenharmony_ci
4337db96d56Sopenharmony_ci
4347db96d56Sopenharmony_ci.. class:: FileHandler()
4357db96d56Sopenharmony_ci
4367db96d56Sopenharmony_ci   Open local files.
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ci.. class:: DataHandler()
4397db96d56Sopenharmony_ci
4407db96d56Sopenharmony_ci   Open data URLs.
4417db96d56Sopenharmony_ci
4427db96d56Sopenharmony_ci   .. versionadded:: 3.4
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci.. class:: FTPHandler()
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci   Open FTP URLs.
4477db96d56Sopenharmony_ci
4487db96d56Sopenharmony_ci
4497db96d56Sopenharmony_ci.. class:: CacheFTPHandler()
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci   Open FTP URLs, keeping a cache of open FTP connections to minimize delays.
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci.. class:: UnknownHandler()
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   A catch-all class to handle unknown URLs.
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci
4597db96d56Sopenharmony_ci.. class:: HTTPErrorProcessor()
4607db96d56Sopenharmony_ci
4617db96d56Sopenharmony_ci   Process HTTP error responses.
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci
4647db96d56Sopenharmony_ci.. _request-objects:
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ciRequest Objects
4677db96d56Sopenharmony_ci---------------
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ciThe following methods describe :class:`Request`'s public interface,
4707db96d56Sopenharmony_ciand so all may be overridden in subclasses.  It also defines several
4717db96d56Sopenharmony_cipublic attributes that can be used by clients to inspect the parsed
4727db96d56Sopenharmony_cirequest.
4737db96d56Sopenharmony_ci
4747db96d56Sopenharmony_ci.. attribute:: Request.full_url
4757db96d56Sopenharmony_ci
4767db96d56Sopenharmony_ci   The original URL passed to the constructor.
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci   .. versionchanged:: 3.4
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci   Request.full_url is a property with setter, getter and a deleter. Getting
4817db96d56Sopenharmony_ci   :attr:`~Request.full_url` returns the original request URL with the
4827db96d56Sopenharmony_ci   fragment, if it was present.
4837db96d56Sopenharmony_ci
4847db96d56Sopenharmony_ci.. attribute:: Request.type
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   The URI scheme.
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci.. attribute:: Request.host
4897db96d56Sopenharmony_ci
4907db96d56Sopenharmony_ci   The URI authority, typically a host, but may also contain a port
4917db96d56Sopenharmony_ci   separated by a colon.
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci.. attribute:: Request.origin_req_host
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci   The original host for the request, without port.
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci.. attribute:: Request.selector
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   The URI path.  If the :class:`Request` uses a proxy, then selector
5007db96d56Sopenharmony_ci   will be the full URL that is passed to the proxy.
5017db96d56Sopenharmony_ci
5027db96d56Sopenharmony_ci.. attribute:: Request.data
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci   The entity body for the request, or ``None`` if not specified.
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci   .. versionchanged:: 3.4
5077db96d56Sopenharmony_ci      Changing value of :attr:`Request.data` now deletes "Content-Length"
5087db96d56Sopenharmony_ci      header if it was previously set or calculated.
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci.. attribute:: Request.unverifiable
5117db96d56Sopenharmony_ci
5127db96d56Sopenharmony_ci   boolean, indicates whether the request is unverifiable as defined
5137db96d56Sopenharmony_ci   by :rfc:`2965`.
5147db96d56Sopenharmony_ci
5157db96d56Sopenharmony_ci.. attribute:: Request.method
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci   The HTTP request method to use.  By default its value is :const:`None`,
5187db96d56Sopenharmony_ci   which means that :meth:`~Request.get_method` will do its normal computation
5197db96d56Sopenharmony_ci   of the method to be used.  Its value can be set (thus overriding the default
5207db96d56Sopenharmony_ci   computation in :meth:`~Request.get_method`) either by providing a default
5217db96d56Sopenharmony_ci   value by setting it at the class level in a :class:`Request` subclass, or by
5227db96d56Sopenharmony_ci   passing a value in to the :class:`Request` constructor via the *method*
5237db96d56Sopenharmony_ci   argument.
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci   .. versionadded:: 3.3
5267db96d56Sopenharmony_ci
5277db96d56Sopenharmony_ci   .. versionchanged:: 3.4
5287db96d56Sopenharmony_ci      A default value can now be set in subclasses; previously it could only
5297db96d56Sopenharmony_ci      be set via the constructor argument.
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci.. method:: Request.get_method()
5337db96d56Sopenharmony_ci
5347db96d56Sopenharmony_ci   Return a string indicating the HTTP request method.  If
5357db96d56Sopenharmony_ci   :attr:`Request.method` is not ``None``, return its value, otherwise return
5367db96d56Sopenharmony_ci   ``'GET'`` if :attr:`Request.data` is ``None``, or ``'POST'`` if it's not.
5377db96d56Sopenharmony_ci   This is only meaningful for HTTP requests.
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ci   .. versionchanged:: 3.3
5407db96d56Sopenharmony_ci      get_method now looks at the value of :attr:`Request.method`.
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci.. method:: Request.add_header(key, val)
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   Add another header to the request.  Headers are currently ignored by all
5467db96d56Sopenharmony_ci   handlers except HTTP handlers, where they are added to the list of headers sent
5477db96d56Sopenharmony_ci   to the server.  Note that there cannot be more than one header with the same
5487db96d56Sopenharmony_ci   name, and later calls will overwrite previous calls in case the *key* collides.
5497db96d56Sopenharmony_ci   Currently, this is no loss of HTTP functionality, since all headers which have
5507db96d56Sopenharmony_ci   meaning when used more than once have a (header-specific) way of gaining the
5517db96d56Sopenharmony_ci   same functionality using only one header.  Note that headers added using
5527db96d56Sopenharmony_ci   this method are also added to redirected requests.
5537db96d56Sopenharmony_ci
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci.. method:: Request.add_unredirected_header(key, header)
5567db96d56Sopenharmony_ci
5577db96d56Sopenharmony_ci   Add a header that will not be added to a redirected request.
5587db96d56Sopenharmony_ci
5597db96d56Sopenharmony_ci
5607db96d56Sopenharmony_ci.. method:: Request.has_header(header)
5617db96d56Sopenharmony_ci
5627db96d56Sopenharmony_ci   Return whether the instance has the named header (checks both regular and
5637db96d56Sopenharmony_ci   unredirected).
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci.. method:: Request.remove_header(header)
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   Remove named header from the request instance (both from regular and
5697db96d56Sopenharmony_ci   unredirected headers).
5707db96d56Sopenharmony_ci
5717db96d56Sopenharmony_ci   .. versionadded:: 3.4
5727db96d56Sopenharmony_ci
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci.. method:: Request.get_full_url()
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci   Return the URL given in the constructor.
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci   .. versionchanged:: 3.4
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   Returns :attr:`Request.full_url`
5817db96d56Sopenharmony_ci
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci.. method:: Request.set_proxy(host, type)
5847db96d56Sopenharmony_ci
5857db96d56Sopenharmony_ci   Prepare the request by connecting to a proxy server. The *host* and *type* will
5867db96d56Sopenharmony_ci   replace those of the instance, and the instance's selector will be the original
5877db96d56Sopenharmony_ci   URL given in the constructor.
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci.. method:: Request.get_header(header_name, default=None)
5917db96d56Sopenharmony_ci
5927db96d56Sopenharmony_ci   Return the value of the given header. If the header is not present, return
5937db96d56Sopenharmony_ci   the default value.
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci
5967db96d56Sopenharmony_ci.. method:: Request.header_items()
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ci   Return a list of tuples (header_name, header_value) of the Request headers.
5997db96d56Sopenharmony_ci
6007db96d56Sopenharmony_ci.. versionchanged:: 3.4
6017db96d56Sopenharmony_ci   The request methods add_data, has_data, get_data, get_type, get_host,
6027db96d56Sopenharmony_ci   get_selector, get_origin_req_host and is_unverifiable that were deprecated
6037db96d56Sopenharmony_ci   since 3.3 have been removed.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci
6067db96d56Sopenharmony_ci.. _opener-director-objects:
6077db96d56Sopenharmony_ci
6087db96d56Sopenharmony_ciOpenerDirector Objects
6097db96d56Sopenharmony_ci----------------------
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci:class:`OpenerDirector` instances have the following methods:
6127db96d56Sopenharmony_ci
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ci.. method:: OpenerDirector.add_handler(handler)
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ci   *handler* should be an instance of :class:`BaseHandler`.  The following methods
6177db96d56Sopenharmony_ci   are searched, and added to the possible chains (note that HTTP errors are a
6187db96d56Sopenharmony_ci   special case).  Note that, in the following, *protocol* should be replaced
6197db96d56Sopenharmony_ci   with the actual protocol to handle, for example :meth:`http_response` would
6207db96d56Sopenharmony_ci   be the HTTP protocol response handler.  Also *type* should be replaced with
6217db96d56Sopenharmony_ci   the actual HTTP code, for example :meth:`http_error_404` would handle HTTP
6227db96d56Sopenharmony_ci   404 errors.
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci   * :meth:`<protocol>_open` --- signal that the handler knows how to open *protocol*
6257db96d56Sopenharmony_ci     URLs.
6267db96d56Sopenharmony_ci
6277db96d56Sopenharmony_ci     See |protocol_open|_ for more information.
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci   * :meth:`http_error_\<type\>` --- signal that the handler knows how to handle HTTP
6307db96d56Sopenharmony_ci     errors with HTTP error code *type*.
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci     See |http_error_nnn|_ for more information.
6337db96d56Sopenharmony_ci
6347db96d56Sopenharmony_ci   * :meth:`<protocol>_error` --- signal that the handler knows how to handle errors
6357db96d56Sopenharmony_ci     from (non-\ ``http``) *protocol*.
6367db96d56Sopenharmony_ci
6377db96d56Sopenharmony_ci   * :meth:`<protocol>_request` --- signal that the handler knows how to pre-process
6387db96d56Sopenharmony_ci     *protocol* requests.
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ci     See |protocol_request|_ for more information.
6417db96d56Sopenharmony_ci
6427db96d56Sopenharmony_ci   * :meth:`<protocol>_response` --- signal that the handler knows how to
6437db96d56Sopenharmony_ci     post-process *protocol* responses.
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci     See |protocol_response|_ for more information.
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ci.. |protocol_open| replace:: :meth:`BaseHandler.<protocol>_open`
6487db96d56Sopenharmony_ci.. |http_error_nnn| replace:: :meth:`BaseHandler.http_error_\<nnn\>`
6497db96d56Sopenharmony_ci.. |protocol_request| replace:: :meth:`BaseHandler.<protocol>_request`
6507db96d56Sopenharmony_ci.. |protocol_response| replace:: :meth:`BaseHandler.<protocol>_response`
6517db96d56Sopenharmony_ci
6527db96d56Sopenharmony_ci.. method:: OpenerDirector.open(url, data=None[, timeout])
6537db96d56Sopenharmony_ci
6547db96d56Sopenharmony_ci   Open the given *url* (which can be a request object or a string), optionally
6557db96d56Sopenharmony_ci   passing the given *data*. Arguments, return values and exceptions raised are
6567db96d56Sopenharmony_ci   the same as those of :func:`urlopen` (which simply calls the :meth:`open`
6577db96d56Sopenharmony_ci   method on the currently installed global :class:`OpenerDirector`).  The
6587db96d56Sopenharmony_ci   optional *timeout* parameter specifies a timeout in seconds for blocking
6597db96d56Sopenharmony_ci   operations like the connection attempt (if not specified, the global default
6607db96d56Sopenharmony_ci   timeout setting will be used). The timeout feature actually works only for
6617db96d56Sopenharmony_ci   HTTP, HTTPS and FTP connections.
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ci.. method:: OpenerDirector.error(proto, *args)
6657db96d56Sopenharmony_ci
6667db96d56Sopenharmony_ci   Handle an error of the given protocol.  This will call the registered error
6677db96d56Sopenharmony_ci   handlers for the given protocol with the given arguments (which are protocol
6687db96d56Sopenharmony_ci   specific).  The HTTP protocol is a special case which uses the HTTP response
6697db96d56Sopenharmony_ci   code to determine the specific error handler; refer to the :meth:`http_error_\<type\>`
6707db96d56Sopenharmony_ci   methods of the handler classes.
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci   Return values and exceptions raised are the same as those of :func:`urlopen`.
6737db96d56Sopenharmony_ci
6747db96d56Sopenharmony_ciOpenerDirector objects open URLs in three stages:
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ciThe order in which these methods are called within each stage is determined by
6777db96d56Sopenharmony_cisorting the handler instances.
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci#. Every handler with a method named like :meth:`<protocol>_request` has that
6807db96d56Sopenharmony_ci   method called to pre-process the request.
6817db96d56Sopenharmony_ci
6827db96d56Sopenharmony_ci#. Handlers with a method named like :meth:`<protocol>_open` are called to handle
6837db96d56Sopenharmony_ci   the request. This stage ends when a handler either returns a non-\ :const:`None`
6847db96d56Sopenharmony_ci   value (ie. a response), or raises an exception (usually
6857db96d56Sopenharmony_ci   :exc:`~urllib.error.URLError`).  Exceptions are allowed to propagate.
6867db96d56Sopenharmony_ci
6877db96d56Sopenharmony_ci   In fact, the above algorithm is first tried for methods named
6887db96d56Sopenharmony_ci   :meth:`default_open`.  If all such methods return :const:`None`, the algorithm
6897db96d56Sopenharmony_ci   is repeated for methods named like :meth:`<protocol>_open`.  If all such methods
6907db96d56Sopenharmony_ci   return :const:`None`, the algorithm is repeated for methods named
6917db96d56Sopenharmony_ci   :meth:`unknown_open`.
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci   Note that the implementation of these methods may involve calls of the parent
6947db96d56Sopenharmony_ci   :class:`OpenerDirector` instance's :meth:`~OpenerDirector.open` and
6957db96d56Sopenharmony_ci   :meth:`~OpenerDirector.error` methods.
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci#. Every handler with a method named like :meth:`<protocol>_response` has that
6987db96d56Sopenharmony_ci   method called to post-process the response.
6997db96d56Sopenharmony_ci
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci.. _base-handler-objects:
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ciBaseHandler Objects
7047db96d56Sopenharmony_ci-------------------
7057db96d56Sopenharmony_ci
7067db96d56Sopenharmony_ci:class:`BaseHandler` objects provide a couple of methods that are directly
7077db96d56Sopenharmony_ciuseful, and others that are meant to be used by derived classes.  These are
7087db96d56Sopenharmony_ciintended for direct use:
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci.. method:: BaseHandler.add_parent(director)
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci   Add a director as parent.
7147db96d56Sopenharmony_ci
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci.. method:: BaseHandler.close()
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ci   Remove any parents.
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ciThe following attribute and methods should only be used by classes derived from
7217db96d56Sopenharmony_ci:class:`BaseHandler`.
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci.. note::
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci   The convention has been adopted that subclasses defining
7267db96d56Sopenharmony_ci   :meth:`<protocol>_request` or :meth:`<protocol>_response` methods are named
7277db96d56Sopenharmony_ci   :class:`\*Processor`; all others are named :class:`\*Handler`.
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci
7307db96d56Sopenharmony_ci.. attribute:: BaseHandler.parent
7317db96d56Sopenharmony_ci
7327db96d56Sopenharmony_ci   A valid :class:`OpenerDirector`, which can be used to open using a different
7337db96d56Sopenharmony_ci   protocol, or handle errors.
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci
7367db96d56Sopenharmony_ci.. method:: BaseHandler.default_open(req)
7377db96d56Sopenharmony_ci
7387db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
7397db96d56Sopenharmony_ci   define it if they want to catch all URLs.
7407db96d56Sopenharmony_ci
7417db96d56Sopenharmony_ci   This method, if implemented, will be called by the parent
7427db96d56Sopenharmony_ci   :class:`OpenerDirector`.  It should return a file-like object as described in
7437db96d56Sopenharmony_ci   the return value of the :meth:`~OpenerDirector.open` method of :class:`OpenerDirector`, or ``None``.
7447db96d56Sopenharmony_ci   It should raise :exc:`~urllib.error.URLError`, unless a truly exceptional
7457db96d56Sopenharmony_ci   thing happens (for example, :exc:`MemoryError` should not be mapped to
7467db96d56Sopenharmony_ci   :exc:`URLError`).
7477db96d56Sopenharmony_ci
7487db96d56Sopenharmony_ci   This method will be called before any protocol-specific open method.
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci
7517db96d56Sopenharmony_ci.. _protocol_open:
7527db96d56Sopenharmony_ci.. method:: BaseHandler.<protocol>_open(req)
7537db96d56Sopenharmony_ci   :noindex:
7547db96d56Sopenharmony_ci
7557db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
7567db96d56Sopenharmony_ci   define it if they want to handle URLs with the given protocol.
7577db96d56Sopenharmony_ci
7587db96d56Sopenharmony_ci   This method, if defined, will be called by the parent :class:`OpenerDirector`.
7597db96d56Sopenharmony_ci   Return values should be the same as for  :meth:`default_open`.
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ci.. method:: BaseHandler.unknown_open(req)
7637db96d56Sopenharmony_ci
7647db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
7657db96d56Sopenharmony_ci   define it if they want to catch all URLs with no specific registered handler to
7667db96d56Sopenharmony_ci   open it.
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ci   This method, if implemented, will be called by the :attr:`parent`
7697db96d56Sopenharmony_ci   :class:`OpenerDirector`.  Return values should be the same as for
7707db96d56Sopenharmony_ci   :meth:`default_open`.
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_ci
7737db96d56Sopenharmony_ci.. method:: BaseHandler.http_error_default(req, fp, code, msg, hdrs)
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
7767db96d56Sopenharmony_ci   override it if they intend to provide a catch-all for otherwise unhandled HTTP
7777db96d56Sopenharmony_ci   errors.  It will be called automatically by the  :class:`OpenerDirector` getting
7787db96d56Sopenharmony_ci   the error, and should not normally be called in other circumstances.
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   *req* will be a :class:`Request` object, *fp* will be a file-like object with
7817db96d56Sopenharmony_ci   the HTTP error body, *code* will be the three-digit code of the error, *msg*
7827db96d56Sopenharmony_ci   will be the user-visible explanation of the code and *hdrs* will be a mapping
7837db96d56Sopenharmony_ci   object with the headers of the error.
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci   Return values and exceptions raised should be the same as those of
7867db96d56Sopenharmony_ci   :func:`urlopen`.
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci.. _http_error_nnn:
7907db96d56Sopenharmony_ci.. method:: BaseHandler.http_error_<nnn>(req, fp, code, msg, hdrs)
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ci   *nnn* should be a three-digit HTTP error code.  This method is also not defined
7937db96d56Sopenharmony_ci   in :class:`BaseHandler`, but will be called, if it exists, on an instance of a
7947db96d56Sopenharmony_ci   subclass, when an HTTP error with code *nnn* occurs.
7957db96d56Sopenharmony_ci
7967db96d56Sopenharmony_ci   Subclasses should override this method to handle specific HTTP errors.
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci   Arguments, return values and exceptions raised should be the same as for
7997db96d56Sopenharmony_ci   :meth:`http_error_default`.
8007db96d56Sopenharmony_ci
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci.. _protocol_request:
8037db96d56Sopenharmony_ci.. method:: BaseHandler.<protocol>_request(req)
8047db96d56Sopenharmony_ci   :noindex:
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
8077db96d56Sopenharmony_ci   define it if they want to pre-process requests of the given protocol.
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci   This method, if defined, will be called by the parent :class:`OpenerDirector`.
8107db96d56Sopenharmony_ci   *req* will be a :class:`Request` object. The return value should be a
8117db96d56Sopenharmony_ci   :class:`Request` object.
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ci.. _protocol_response:
8157db96d56Sopenharmony_ci.. method:: BaseHandler.<protocol>_response(req, response)
8167db96d56Sopenharmony_ci   :noindex:
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci   This method is *not* defined in :class:`BaseHandler`, but subclasses should
8197db96d56Sopenharmony_ci   define it if they want to post-process responses of the given protocol.
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci   This method, if defined, will be called by the parent :class:`OpenerDirector`.
8227db96d56Sopenharmony_ci   *req* will be a :class:`Request` object. *response* will be an object
8237db96d56Sopenharmony_ci   implementing the same interface as the return value of :func:`urlopen`.  The
8247db96d56Sopenharmony_ci   return value should implement the same interface as the return value of
8257db96d56Sopenharmony_ci   :func:`urlopen`.
8267db96d56Sopenharmony_ci
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci.. _http-redirect-handler:
8297db96d56Sopenharmony_ci
8307db96d56Sopenharmony_ciHTTPRedirectHandler Objects
8317db96d56Sopenharmony_ci---------------------------
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci.. note::
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci   Some HTTP redirections require action from this module's client code.  If this
8367db96d56Sopenharmony_ci   is the case, :exc:`~urllib.error.HTTPError` is raised.  See :rfc:`2616` for
8377db96d56Sopenharmony_ci   details of the precise meanings of the various redirection codes.
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   An :class:`HTTPError` exception raised as a security consideration if the
8407db96d56Sopenharmony_ci   HTTPRedirectHandler is presented with a redirected URL which is not an HTTP,
8417db96d56Sopenharmony_ci   HTTPS or FTP URL.
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.redirect_request(req, fp, code, msg, hdrs, newurl)
8457db96d56Sopenharmony_ci
8467db96d56Sopenharmony_ci   Return a :class:`Request` or ``None`` in response to a redirect. This is called
8477db96d56Sopenharmony_ci   by the default implementations of the :meth:`http_error_30\*` methods when a
8487db96d56Sopenharmony_ci   redirection is received from the server.  If a redirection should take place,
8497db96d56Sopenharmony_ci   return a new :class:`Request` to allow :meth:`http_error_30\*` to perform the
8507db96d56Sopenharmony_ci   redirect to *newurl*.  Otherwise, raise :exc:`~urllib.error.HTTPError` if
8517db96d56Sopenharmony_ci   no other handler should try to handle this URL, or return ``None`` if you
8527db96d56Sopenharmony_ci   can't but another handler might.
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci   .. note::
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci      The default implementation of this method does not strictly follow :rfc:`2616`,
8577db96d56Sopenharmony_ci      which says that 301 and 302 responses to ``POST`` requests must not be
8587db96d56Sopenharmony_ci      automatically redirected without confirmation by the user.  In reality, browsers
8597db96d56Sopenharmony_ci      do allow automatic redirection of these responses, changing the POST to a
8607db96d56Sopenharmony_ci      ``GET``, and the default implementation reproduces this behavior.
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.http_error_301(req, fp, code, msg, hdrs)
8647db96d56Sopenharmony_ci
8657db96d56Sopenharmony_ci   Redirect to the ``Location:`` or ``URI:`` URL.  This method is called by the
8667db96d56Sopenharmony_ci   parent :class:`OpenerDirector` when getting an HTTP 'moved permanently' response.
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci
8697db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.http_error_302(req, fp, code, msg, hdrs)
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci   The same as :meth:`http_error_301`, but called for the 'found' response.
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.http_error_303(req, fp, code, msg, hdrs)
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci   The same as :meth:`http_error_301`, but called for the 'see other' response.
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci
8797db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.http_error_307(req, fp, code, msg, hdrs)
8807db96d56Sopenharmony_ci
8817db96d56Sopenharmony_ci   The same as :meth:`http_error_301`, but called for the 'temporary redirect'
8827db96d56Sopenharmony_ci   response. It does not allow changing the request method from ``POST``
8837db96d56Sopenharmony_ci   to ``GET``.
8847db96d56Sopenharmony_ci
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci.. method:: HTTPRedirectHandler.http_error_308(req, fp, code, msg, hdrs)
8877db96d56Sopenharmony_ci
8887db96d56Sopenharmony_ci   The same as :meth:`http_error_301`, but called for the 'permanent redirect'
8897db96d56Sopenharmony_ci   response. It does not allow changing the request method from ``POST``
8907db96d56Sopenharmony_ci   to ``GET``.
8917db96d56Sopenharmony_ci
8927db96d56Sopenharmony_ci   .. versionadded:: 3.11
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci
8957db96d56Sopenharmony_ci.. _http-cookie-processor:
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ciHTTPCookieProcessor Objects
8987db96d56Sopenharmony_ci---------------------------
8997db96d56Sopenharmony_ci
9007db96d56Sopenharmony_ci:class:`HTTPCookieProcessor` instances have one attribute:
9017db96d56Sopenharmony_ci
9027db96d56Sopenharmony_ci.. attribute:: HTTPCookieProcessor.cookiejar
9037db96d56Sopenharmony_ci
9047db96d56Sopenharmony_ci   The :class:`http.cookiejar.CookieJar` in which cookies are stored.
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_ci.. _proxy-handler:
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ciProxyHandler Objects
9107db96d56Sopenharmony_ci--------------------
9117db96d56Sopenharmony_ci
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci.. method:: ProxyHandler.<protocol>_open(request)
9147db96d56Sopenharmony_ci   :noindex:
9157db96d56Sopenharmony_ci
9167db96d56Sopenharmony_ci   The :class:`ProxyHandler` will have a method :meth:`<protocol>_open` for every
9177db96d56Sopenharmony_ci   *protocol* which has a proxy in the *proxies* dictionary given in the
9187db96d56Sopenharmony_ci   constructor.  The method will modify requests to go through the proxy, by
9197db96d56Sopenharmony_ci   calling ``request.set_proxy()``, and call the next handler in the chain to
9207db96d56Sopenharmony_ci   actually execute the protocol.
9217db96d56Sopenharmony_ci
9227db96d56Sopenharmony_ci
9237db96d56Sopenharmony_ci.. _http-password-mgr:
9247db96d56Sopenharmony_ci
9257db96d56Sopenharmony_ciHTTPPasswordMgr Objects
9267db96d56Sopenharmony_ci-----------------------
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ciThese methods are available on :class:`HTTPPasswordMgr` and
9297db96d56Sopenharmony_ci:class:`HTTPPasswordMgrWithDefaultRealm` objects.
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci
9327db96d56Sopenharmony_ci.. method:: HTTPPasswordMgr.add_password(realm, uri, user, passwd)
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci   *uri* can be either a single URI, or a sequence of URIs. *realm*, *user* and
9357db96d56Sopenharmony_ci   *passwd* must be strings. This causes ``(user, passwd)`` to be used as
9367db96d56Sopenharmony_ci   authentication tokens when authentication for *realm* and a super-URI of any of
9377db96d56Sopenharmony_ci   the given URIs is given.
9387db96d56Sopenharmony_ci
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ci.. method:: HTTPPasswordMgr.find_user_password(realm, authuri)
9417db96d56Sopenharmony_ci
9427db96d56Sopenharmony_ci   Get user/password for given realm and URI, if any.  This method will return
9437db96d56Sopenharmony_ci   ``(None, None)`` if there is no matching user/password.
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci   For :class:`HTTPPasswordMgrWithDefaultRealm` objects, the realm ``None`` will be
9467db96d56Sopenharmony_ci   searched if the given *realm* has no matching user/password.
9477db96d56Sopenharmony_ci
9487db96d56Sopenharmony_ci
9497db96d56Sopenharmony_ci.. _http-password-mgr-with-prior-auth:
9507db96d56Sopenharmony_ci
9517db96d56Sopenharmony_ciHTTPPasswordMgrWithPriorAuth Objects
9527db96d56Sopenharmony_ci------------------------------------
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ciThis password manager extends :class:`HTTPPasswordMgrWithDefaultRealm` to support
9557db96d56Sopenharmony_citracking URIs for which authentication credentials should always be sent.
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_ci
9587db96d56Sopenharmony_ci.. method:: HTTPPasswordMgrWithPriorAuth.add_password(realm, uri, user, \
9597db96d56Sopenharmony_ci            passwd, is_authenticated=False)
9607db96d56Sopenharmony_ci
9617db96d56Sopenharmony_ci   *realm*, *uri*, *user*, *passwd* are as for
9627db96d56Sopenharmony_ci   :meth:`HTTPPasswordMgr.add_password`.  *is_authenticated* sets the initial
9637db96d56Sopenharmony_ci   value of the ``is_authenticated`` flag for the given URI or list of URIs.
9647db96d56Sopenharmony_ci   If *is_authenticated* is specified as ``True``, *realm* is ignored.
9657db96d56Sopenharmony_ci
9667db96d56Sopenharmony_ci
9677db96d56Sopenharmony_ci.. method:: HTTPPasswordMgrWithPriorAuth.find_user_password(realm, authuri)
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci   Same as for :class:`HTTPPasswordMgrWithDefaultRealm` objects
9707db96d56Sopenharmony_ci
9717db96d56Sopenharmony_ci
9727db96d56Sopenharmony_ci.. method:: HTTPPasswordMgrWithPriorAuth.update_authenticated(self, uri, \
9737db96d56Sopenharmony_ci            is_authenticated=False)
9747db96d56Sopenharmony_ci
9757db96d56Sopenharmony_ci   Update the ``is_authenticated`` flag for the given *uri* or list
9767db96d56Sopenharmony_ci   of URIs.
9777db96d56Sopenharmony_ci
9787db96d56Sopenharmony_ci
9797db96d56Sopenharmony_ci.. method:: HTTPPasswordMgrWithPriorAuth.is_authenticated(self, authuri)
9807db96d56Sopenharmony_ci
9817db96d56Sopenharmony_ci   Returns the current state of the ``is_authenticated`` flag for
9827db96d56Sopenharmony_ci   the given URI.
9837db96d56Sopenharmony_ci
9847db96d56Sopenharmony_ci
9857db96d56Sopenharmony_ci.. _abstract-basic-auth-handler:
9867db96d56Sopenharmony_ci
9877db96d56Sopenharmony_ciAbstractBasicAuthHandler Objects
9887db96d56Sopenharmony_ci--------------------------------
9897db96d56Sopenharmony_ci
9907db96d56Sopenharmony_ci
9917db96d56Sopenharmony_ci.. method:: AbstractBasicAuthHandler.http_error_auth_reqed(authreq, host, req, headers)
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ci   Handle an authentication request by getting a user/password pair, and re-trying
9947db96d56Sopenharmony_ci   the request.  *authreq* should be the name of the header where the information
9957db96d56Sopenharmony_ci   about the realm is included in the request, *host* specifies the URL and path to
9967db96d56Sopenharmony_ci   authenticate for, *req* should be the (failed) :class:`Request` object, and
9977db96d56Sopenharmony_ci   *headers* should be the error headers.
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ci   *host* is either an authority (e.g. ``"python.org"``) or a URL containing an
10007db96d56Sopenharmony_ci   authority component (e.g. ``"http://python.org/"``). In either case, the
10017db96d56Sopenharmony_ci   authority must not contain a userinfo component (so, ``"python.org"`` and
10027db96d56Sopenharmony_ci   ``"python.org:80"`` are fine, ``"joe:password@python.org"`` is not).
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci
10057db96d56Sopenharmony_ci.. _http-basic-auth-handler:
10067db96d56Sopenharmony_ci
10077db96d56Sopenharmony_ciHTTPBasicAuthHandler Objects
10087db96d56Sopenharmony_ci----------------------------
10097db96d56Sopenharmony_ci
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ci.. method:: HTTPBasicAuthHandler.http_error_401(req, fp, code,  msg, hdrs)
10127db96d56Sopenharmony_ci
10137db96d56Sopenharmony_ci   Retry the request with authentication information, if available.
10147db96d56Sopenharmony_ci
10157db96d56Sopenharmony_ci
10167db96d56Sopenharmony_ci.. _proxy-basic-auth-handler:
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ciProxyBasicAuthHandler Objects
10197db96d56Sopenharmony_ci-----------------------------
10207db96d56Sopenharmony_ci
10217db96d56Sopenharmony_ci
10227db96d56Sopenharmony_ci.. method:: ProxyBasicAuthHandler.http_error_407(req, fp, code,  msg, hdrs)
10237db96d56Sopenharmony_ci
10247db96d56Sopenharmony_ci   Retry the request with authentication information, if available.
10257db96d56Sopenharmony_ci
10267db96d56Sopenharmony_ci
10277db96d56Sopenharmony_ci.. _abstract-digest-auth-handler:
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ciAbstractDigestAuthHandler Objects
10307db96d56Sopenharmony_ci---------------------------------
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci
10337db96d56Sopenharmony_ci.. method:: AbstractDigestAuthHandler.http_error_auth_reqed(authreq, host, req, headers)
10347db96d56Sopenharmony_ci
10357db96d56Sopenharmony_ci   *authreq* should be the name of the header where the information about the realm
10367db96d56Sopenharmony_ci   is included in the request, *host* should be the host to authenticate to, *req*
10377db96d56Sopenharmony_ci   should be the (failed) :class:`Request` object, and *headers* should be the
10387db96d56Sopenharmony_ci   error headers.
10397db96d56Sopenharmony_ci
10407db96d56Sopenharmony_ci
10417db96d56Sopenharmony_ci.. _http-digest-auth-handler:
10427db96d56Sopenharmony_ci
10437db96d56Sopenharmony_ciHTTPDigestAuthHandler Objects
10447db96d56Sopenharmony_ci-----------------------------
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci
10477db96d56Sopenharmony_ci.. method:: HTTPDigestAuthHandler.http_error_401(req, fp, code,  msg, hdrs)
10487db96d56Sopenharmony_ci
10497db96d56Sopenharmony_ci   Retry the request with authentication information, if available.
10507db96d56Sopenharmony_ci
10517db96d56Sopenharmony_ci
10527db96d56Sopenharmony_ci.. _proxy-digest-auth-handler:
10537db96d56Sopenharmony_ci
10547db96d56Sopenharmony_ciProxyDigestAuthHandler Objects
10557db96d56Sopenharmony_ci------------------------------
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci
10587db96d56Sopenharmony_ci.. method:: ProxyDigestAuthHandler.http_error_407(req, fp, code,  msg, hdrs)
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci   Retry the request with authentication information, if available.
10617db96d56Sopenharmony_ci
10627db96d56Sopenharmony_ci
10637db96d56Sopenharmony_ci.. _http-handler-objects:
10647db96d56Sopenharmony_ci
10657db96d56Sopenharmony_ciHTTPHandler Objects
10667db96d56Sopenharmony_ci-------------------
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci
10697db96d56Sopenharmony_ci.. method:: HTTPHandler.http_open(req)
10707db96d56Sopenharmony_ci
10717db96d56Sopenharmony_ci   Send an HTTP request, which can be either GET or POST, depending on
10727db96d56Sopenharmony_ci   ``req.has_data()``.
10737db96d56Sopenharmony_ci
10747db96d56Sopenharmony_ci
10757db96d56Sopenharmony_ci.. _https-handler-objects:
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_ciHTTPSHandler Objects
10787db96d56Sopenharmony_ci--------------------
10797db96d56Sopenharmony_ci
10807db96d56Sopenharmony_ci
10817db96d56Sopenharmony_ci.. method:: HTTPSHandler.https_open(req)
10827db96d56Sopenharmony_ci
10837db96d56Sopenharmony_ci   Send an HTTPS request, which can be either GET or POST, depending on
10847db96d56Sopenharmony_ci   ``req.has_data()``.
10857db96d56Sopenharmony_ci
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci.. _file-handler-objects:
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ciFileHandler Objects
10907db96d56Sopenharmony_ci-------------------
10917db96d56Sopenharmony_ci
10927db96d56Sopenharmony_ci
10937db96d56Sopenharmony_ci.. method:: FileHandler.file_open(req)
10947db96d56Sopenharmony_ci
10957db96d56Sopenharmony_ci   Open the file locally, if there is no host name, or the host name is
10967db96d56Sopenharmony_ci   ``'localhost'``.
10977db96d56Sopenharmony_ci
10987db96d56Sopenharmony_ci   .. versionchanged:: 3.2
10997db96d56Sopenharmony_ci      This method is applicable only for local hostnames.  When a remote
11007db96d56Sopenharmony_ci      hostname is given, an :exc:`~urllib.error.URLError` is raised.
11017db96d56Sopenharmony_ci
11027db96d56Sopenharmony_ci
11037db96d56Sopenharmony_ci.. _data-handler-objects:
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ciDataHandler Objects
11067db96d56Sopenharmony_ci-------------------
11077db96d56Sopenharmony_ci
11087db96d56Sopenharmony_ci.. method:: DataHandler.data_open(req)
11097db96d56Sopenharmony_ci
11107db96d56Sopenharmony_ci   Read a data URL. This kind of URL contains the content encoded in the URL
11117db96d56Sopenharmony_ci   itself. The data URL syntax is specified in :rfc:`2397`. This implementation
11127db96d56Sopenharmony_ci   ignores white spaces in base64 encoded data URLs so the URL may be wrapped
11137db96d56Sopenharmony_ci   in whatever source file it comes from. But even though some browsers don't
11147db96d56Sopenharmony_ci   mind about a missing padding at the end of a base64 encoded data URL, this
11157db96d56Sopenharmony_ci   implementation will raise an :exc:`ValueError` in that case.
11167db96d56Sopenharmony_ci
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ci.. _ftp-handler-objects:
11197db96d56Sopenharmony_ci
11207db96d56Sopenharmony_ciFTPHandler Objects
11217db96d56Sopenharmony_ci------------------
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci
11247db96d56Sopenharmony_ci.. method:: FTPHandler.ftp_open(req)
11257db96d56Sopenharmony_ci
11267db96d56Sopenharmony_ci   Open the FTP file indicated by *req*. The login is always done with empty
11277db96d56Sopenharmony_ci   username and password.
11287db96d56Sopenharmony_ci
11297db96d56Sopenharmony_ci
11307db96d56Sopenharmony_ci.. _cacheftp-handler-objects:
11317db96d56Sopenharmony_ci
11327db96d56Sopenharmony_ciCacheFTPHandler Objects
11337db96d56Sopenharmony_ci-----------------------
11347db96d56Sopenharmony_ci
11357db96d56Sopenharmony_ci:class:`CacheFTPHandler` objects are :class:`FTPHandler` objects with the
11367db96d56Sopenharmony_cifollowing additional methods:
11377db96d56Sopenharmony_ci
11387db96d56Sopenharmony_ci
11397db96d56Sopenharmony_ci.. method:: CacheFTPHandler.setTimeout(t)
11407db96d56Sopenharmony_ci
11417db96d56Sopenharmony_ci   Set timeout of connections to *t* seconds.
11427db96d56Sopenharmony_ci
11437db96d56Sopenharmony_ci
11447db96d56Sopenharmony_ci.. method:: CacheFTPHandler.setMaxConns(m)
11457db96d56Sopenharmony_ci
11467db96d56Sopenharmony_ci   Set maximum number of cached connections to *m*.
11477db96d56Sopenharmony_ci
11487db96d56Sopenharmony_ci
11497db96d56Sopenharmony_ci.. _unknown-handler-objects:
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ciUnknownHandler Objects
11527db96d56Sopenharmony_ci----------------------
11537db96d56Sopenharmony_ci
11547db96d56Sopenharmony_ci
11557db96d56Sopenharmony_ci.. method:: UnknownHandler.unknown_open()
11567db96d56Sopenharmony_ci
11577db96d56Sopenharmony_ci   Raise a :exc:`~urllib.error.URLError` exception.
11587db96d56Sopenharmony_ci
11597db96d56Sopenharmony_ci
11607db96d56Sopenharmony_ci.. _http-error-processor-objects:
11617db96d56Sopenharmony_ci
11627db96d56Sopenharmony_ciHTTPErrorProcessor Objects
11637db96d56Sopenharmony_ci--------------------------
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ci.. method:: HTTPErrorProcessor.http_response(request, response)
11667db96d56Sopenharmony_ci
11677db96d56Sopenharmony_ci   Process HTTP error responses.
11687db96d56Sopenharmony_ci
11697db96d56Sopenharmony_ci   For 200 error codes, the response object is returned immediately.
11707db96d56Sopenharmony_ci
11717db96d56Sopenharmony_ci   For non-200 error codes, this simply passes the job on to the
11727db96d56Sopenharmony_ci   :meth:`http_error_\<type\>` handler methods, via :meth:`OpenerDirector.error`.
11737db96d56Sopenharmony_ci   Eventually, :class:`HTTPDefaultErrorHandler` will raise an
11747db96d56Sopenharmony_ci   :exc:`~urllib.error.HTTPError` if no other handler handles the error.
11757db96d56Sopenharmony_ci
11767db96d56Sopenharmony_ci
11777db96d56Sopenharmony_ci.. method:: HTTPErrorProcessor.https_response(request, response)
11787db96d56Sopenharmony_ci
11797db96d56Sopenharmony_ci   Process HTTPS error responses.
11807db96d56Sopenharmony_ci
11817db96d56Sopenharmony_ci   The behavior is same as :meth:`http_response`.
11827db96d56Sopenharmony_ci
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci.. _urllib-request-examples:
11857db96d56Sopenharmony_ci
11867db96d56Sopenharmony_ciExamples
11877db96d56Sopenharmony_ci--------
11887db96d56Sopenharmony_ci
11897db96d56Sopenharmony_ciIn addition to the examples below, more examples are given in
11907db96d56Sopenharmony_ci:ref:`urllib-howto`.
11917db96d56Sopenharmony_ci
11927db96d56Sopenharmony_ciThis example gets the python.org main page and displays the first 300 bytes of
11937db96d56Sopenharmony_ciit. ::
11947db96d56Sopenharmony_ci
11957db96d56Sopenharmony_ci   >>> import urllib.request
11967db96d56Sopenharmony_ci   >>> with urllib.request.urlopen('http://www.python.org/') as f:
11977db96d56Sopenharmony_ci   ...     print(f.read(300))
11987db96d56Sopenharmony_ci   ...
11997db96d56Sopenharmony_ci   b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12007db96d56Sopenharmony_ci   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n\n\n<html
12017db96d56Sopenharmony_ci   xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n\n<head>\n
12027db96d56Sopenharmony_ci   <meta http-equiv="content-type" content="text/html; charset=utf-8" />\n
12037db96d56Sopenharmony_ci   <title>Python Programming '
12047db96d56Sopenharmony_ci
12057db96d56Sopenharmony_ciNote that urlopen returns a bytes object.  This is because there is no way
12067db96d56Sopenharmony_cifor urlopen to automatically determine the encoding of the byte stream
12077db96d56Sopenharmony_ciit receives from the HTTP server. In general, a program will decode
12087db96d56Sopenharmony_cithe returned bytes object to string once it determines or guesses
12097db96d56Sopenharmony_cithe appropriate encoding.
12107db96d56Sopenharmony_ci
12117db96d56Sopenharmony_ciThe following W3C document, https://www.w3.org/International/O-charset\ , lists
12127db96d56Sopenharmony_cithe various ways in which an (X)HTML or an XML document could have specified its
12137db96d56Sopenharmony_ciencoding information.
12147db96d56Sopenharmony_ci
12157db96d56Sopenharmony_ciAs the python.org website uses *utf-8* encoding as specified in its meta tag, we
12167db96d56Sopenharmony_ciwill use the same for decoding the bytes object. ::
12177db96d56Sopenharmony_ci
12187db96d56Sopenharmony_ci   >>> with urllib.request.urlopen('http://www.python.org/') as f:
12197db96d56Sopenharmony_ci   ...     print(f.read(100).decode('utf-8'))
12207db96d56Sopenharmony_ci   ...
12217db96d56Sopenharmony_ci   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12227db96d56Sopenharmony_ci   "http://www.w3.org/TR/xhtml1/DTD/xhtm
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ciIt is also possible to achieve the same result without using the
12257db96d56Sopenharmony_ci:term:`context manager` approach. ::
12267db96d56Sopenharmony_ci
12277db96d56Sopenharmony_ci   >>> import urllib.request
12287db96d56Sopenharmony_ci   >>> f = urllib.request.urlopen('http://www.python.org/')
12297db96d56Sopenharmony_ci   >>> print(f.read(100).decode('utf-8'))
12307db96d56Sopenharmony_ci   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
12317db96d56Sopenharmony_ci   "http://www.w3.org/TR/xhtml1/DTD/xhtm
12327db96d56Sopenharmony_ci
12337db96d56Sopenharmony_ciIn the following example, we are sending a data-stream to the stdin of a CGI
12347db96d56Sopenharmony_ciand reading the data it returns to us. Note that this example will only work
12357db96d56Sopenharmony_ciwhen the Python installation supports SSL. ::
12367db96d56Sopenharmony_ci
12377db96d56Sopenharmony_ci   >>> import urllib.request
12387db96d56Sopenharmony_ci   >>> req = urllib.request.Request(url='https://localhost/cgi-bin/test.cgi',
12397db96d56Sopenharmony_ci   ...                       data=b'This data is passed to stdin of the CGI')
12407db96d56Sopenharmony_ci   >>> with urllib.request.urlopen(req) as f:
12417db96d56Sopenharmony_ci   ...     print(f.read().decode('utf-8'))
12427db96d56Sopenharmony_ci   ...
12437db96d56Sopenharmony_ci   Got Data: "This data is passed to stdin of the CGI"
12447db96d56Sopenharmony_ci
12457db96d56Sopenharmony_ciThe code for the sample CGI used in the above example is::
12467db96d56Sopenharmony_ci
12477db96d56Sopenharmony_ci   #!/usr/bin/env python
12487db96d56Sopenharmony_ci   import sys
12497db96d56Sopenharmony_ci   data = sys.stdin.read()
12507db96d56Sopenharmony_ci   print('Content-type: text/plain\n\nGot Data: "%s"' % data)
12517db96d56Sopenharmony_ci
12527db96d56Sopenharmony_ciHere is an example of doing a ``PUT`` request using :class:`Request`::
12537db96d56Sopenharmony_ci
12547db96d56Sopenharmony_ci    import urllib.request
12557db96d56Sopenharmony_ci    DATA = b'some data'
12567db96d56Sopenharmony_ci    req = urllib.request.Request(url='http://localhost:8080', data=DATA, method='PUT')
12577db96d56Sopenharmony_ci    with urllib.request.urlopen(req) as f:
12587db96d56Sopenharmony_ci        pass
12597db96d56Sopenharmony_ci    print(f.status)
12607db96d56Sopenharmony_ci    print(f.reason)
12617db96d56Sopenharmony_ci
12627db96d56Sopenharmony_ciUse of Basic HTTP Authentication::
12637db96d56Sopenharmony_ci
12647db96d56Sopenharmony_ci   import urllib.request
12657db96d56Sopenharmony_ci   # Create an OpenerDirector with support for Basic HTTP Authentication...
12667db96d56Sopenharmony_ci   auth_handler = urllib.request.HTTPBasicAuthHandler()
12677db96d56Sopenharmony_ci   auth_handler.add_password(realm='PDQ Application',
12687db96d56Sopenharmony_ci                             uri='https://mahler:8092/site-updates.py',
12697db96d56Sopenharmony_ci                             user='klem',
12707db96d56Sopenharmony_ci                             passwd='kadidd!ehopper')
12717db96d56Sopenharmony_ci   opener = urllib.request.build_opener(auth_handler)
12727db96d56Sopenharmony_ci   # ...and install it globally so it can be used with urlopen.
12737db96d56Sopenharmony_ci   urllib.request.install_opener(opener)
12747db96d56Sopenharmony_ci   urllib.request.urlopen('http://www.example.com/login.html')
12757db96d56Sopenharmony_ci
12767db96d56Sopenharmony_ci:func:`build_opener` provides many handlers by default, including a
12777db96d56Sopenharmony_ci:class:`ProxyHandler`.  By default, :class:`ProxyHandler` uses the environment
12787db96d56Sopenharmony_civariables named ``<scheme>_proxy``, where ``<scheme>`` is the URL scheme
12797db96d56Sopenharmony_ciinvolved.  For example, the :envvar:`http_proxy` environment variable is read to
12807db96d56Sopenharmony_ciobtain the HTTP proxy's URL.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ciThis example replaces the default :class:`ProxyHandler` with one that uses
12837db96d56Sopenharmony_ciprogrammatically supplied proxy URLs, and adds proxy authorization support with
12847db96d56Sopenharmony_ci:class:`ProxyBasicAuthHandler`. ::
12857db96d56Sopenharmony_ci
12867db96d56Sopenharmony_ci   proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
12877db96d56Sopenharmony_ci   proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
12887db96d56Sopenharmony_ci   proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
12897db96d56Sopenharmony_ci
12907db96d56Sopenharmony_ci   opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
12917db96d56Sopenharmony_ci   # This time, rather than install the OpenerDirector, we use it directly:
12927db96d56Sopenharmony_ci   opener.open('http://www.example.com/login.html')
12937db96d56Sopenharmony_ci
12947db96d56Sopenharmony_ciAdding HTTP headers:
12957db96d56Sopenharmony_ci
12967db96d56Sopenharmony_ciUse the *headers* argument to the :class:`Request` constructor, or::
12977db96d56Sopenharmony_ci
12987db96d56Sopenharmony_ci   import urllib.request
12997db96d56Sopenharmony_ci   req = urllib.request.Request('http://www.example.com/')
13007db96d56Sopenharmony_ci   req.add_header('Referer', 'http://www.python.org/')
13017db96d56Sopenharmony_ci   # Customize the default User-Agent header value:
13027db96d56Sopenharmony_ci   req.add_header('User-Agent', 'urllib-example/0.1 (Contact: . . .)')
13037db96d56Sopenharmony_ci   r = urllib.request.urlopen(req)
13047db96d56Sopenharmony_ci
13057db96d56Sopenharmony_ci:class:`OpenerDirector` automatically adds a :mailheader:`User-Agent` header to
13067db96d56Sopenharmony_cievery :class:`Request`.  To change this::
13077db96d56Sopenharmony_ci
13087db96d56Sopenharmony_ci   import urllib.request
13097db96d56Sopenharmony_ci   opener = urllib.request.build_opener()
13107db96d56Sopenharmony_ci   opener.addheaders = [('User-agent', 'Mozilla/5.0')]
13117db96d56Sopenharmony_ci   opener.open('http://www.example.com/')
13127db96d56Sopenharmony_ci
13137db96d56Sopenharmony_ciAlso, remember that a few standard headers (:mailheader:`Content-Length`,
13147db96d56Sopenharmony_ci:mailheader:`Content-Type` and :mailheader:`Host`)
13157db96d56Sopenharmony_ciare added when the :class:`Request` is passed to :func:`urlopen` (or
13167db96d56Sopenharmony_ci:meth:`OpenerDirector.open`).
13177db96d56Sopenharmony_ci
13187db96d56Sopenharmony_ci.. _urllib-examples:
13197db96d56Sopenharmony_ci
13207db96d56Sopenharmony_ciHere is an example session that uses the ``GET`` method to retrieve a URL
13217db96d56Sopenharmony_cicontaining parameters::
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_ci   >>> import urllib.request
13247db96d56Sopenharmony_ci   >>> import urllib.parse
13257db96d56Sopenharmony_ci   >>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
13267db96d56Sopenharmony_ci   >>> url = "http://www.musi-cal.com/cgi-bin/query?%s" % params
13277db96d56Sopenharmony_ci   >>> with urllib.request.urlopen(url) as f:
13287db96d56Sopenharmony_ci   ...     print(f.read().decode('utf-8'))
13297db96d56Sopenharmony_ci   ...
13307db96d56Sopenharmony_ci
13317db96d56Sopenharmony_ciThe following example uses the ``POST`` method instead. Note that params output
13327db96d56Sopenharmony_cifrom urlencode is encoded to bytes before it is sent to urlopen as data::
13337db96d56Sopenharmony_ci
13347db96d56Sopenharmony_ci   >>> import urllib.request
13357db96d56Sopenharmony_ci   >>> import urllib.parse
13367db96d56Sopenharmony_ci   >>> data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
13377db96d56Sopenharmony_ci   >>> data = data.encode('ascii')
13387db96d56Sopenharmony_ci   >>> with urllib.request.urlopen("http://requestb.in/xrbl82xr", data) as f:
13397db96d56Sopenharmony_ci   ...     print(f.read().decode('utf-8'))
13407db96d56Sopenharmony_ci   ...
13417db96d56Sopenharmony_ci
13427db96d56Sopenharmony_ciThe following example uses an explicitly specified HTTP proxy, overriding
13437db96d56Sopenharmony_cienvironment settings::
13447db96d56Sopenharmony_ci
13457db96d56Sopenharmony_ci   >>> import urllib.request
13467db96d56Sopenharmony_ci   >>> proxies = {'http': 'http://proxy.example.com:8080/'}
13477db96d56Sopenharmony_ci   >>> opener = urllib.request.FancyURLopener(proxies)
13487db96d56Sopenharmony_ci   >>> with opener.open("http://www.python.org") as f:
13497db96d56Sopenharmony_ci   ...     f.read().decode('utf-8')
13507db96d56Sopenharmony_ci   ...
13517db96d56Sopenharmony_ci
13527db96d56Sopenharmony_ciThe following example uses no proxies at all, overriding environment settings::
13537db96d56Sopenharmony_ci
13547db96d56Sopenharmony_ci   >>> import urllib.request
13557db96d56Sopenharmony_ci   >>> opener = urllib.request.FancyURLopener({})
13567db96d56Sopenharmony_ci   >>> with opener.open("http://www.python.org/") as f:
13577db96d56Sopenharmony_ci   ...     f.read().decode('utf-8')
13587db96d56Sopenharmony_ci   ...
13597db96d56Sopenharmony_ci
13607db96d56Sopenharmony_ci
13617db96d56Sopenharmony_ciLegacy interface
13627db96d56Sopenharmony_ci----------------
13637db96d56Sopenharmony_ci
13647db96d56Sopenharmony_ciThe following functions and classes are ported from the Python 2 module
13657db96d56Sopenharmony_ci``urllib`` (as opposed to ``urllib2``).  They might become deprecated at
13667db96d56Sopenharmony_cisome point in the future.
13677db96d56Sopenharmony_ci
13687db96d56Sopenharmony_ci.. function:: urlretrieve(url, filename=None, reporthook=None, data=None)
13697db96d56Sopenharmony_ci
13707db96d56Sopenharmony_ci   Copy a network object denoted by a URL to a local file. If the URL
13717db96d56Sopenharmony_ci   points to a local file, the object will not be copied unless filename is supplied.
13727db96d56Sopenharmony_ci   Return a tuple ``(filename, headers)`` where *filename* is the
13737db96d56Sopenharmony_ci   local file name under which the object can be found, and *headers* is whatever
13747db96d56Sopenharmony_ci   the :meth:`info` method of the object returned by :func:`urlopen` returned (for
13757db96d56Sopenharmony_ci   a remote object). Exceptions are the same as for :func:`urlopen`.
13767db96d56Sopenharmony_ci
13777db96d56Sopenharmony_ci   The second argument, if present, specifies the file location to copy to (if
13787db96d56Sopenharmony_ci   absent, the location will be a tempfile with a generated name). The third
13797db96d56Sopenharmony_ci   argument, if present, is a callable that will be called once on
13807db96d56Sopenharmony_ci   establishment of the network connection and once after each block read
13817db96d56Sopenharmony_ci   thereafter.  The callable will be passed three arguments; a count of blocks
13827db96d56Sopenharmony_ci   transferred so far, a block size in bytes, and the total size of the file.  The
13837db96d56Sopenharmony_ci   third argument may be ``-1`` on older FTP servers which do not return a file
13847db96d56Sopenharmony_ci   size in response to a retrieval request.
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ci   The following example illustrates the most common usage scenario::
13877db96d56Sopenharmony_ci
13887db96d56Sopenharmony_ci      >>> import urllib.request
13897db96d56Sopenharmony_ci      >>> local_filename, headers = urllib.request.urlretrieve('http://python.org/')
13907db96d56Sopenharmony_ci      >>> html = open(local_filename)
13917db96d56Sopenharmony_ci      >>> html.close()
13927db96d56Sopenharmony_ci
13937db96d56Sopenharmony_ci   If the *url* uses the :file:`http:` scheme identifier, the optional *data*
13947db96d56Sopenharmony_ci   argument may be given to specify a ``POST`` request (normally the request
13957db96d56Sopenharmony_ci   type is ``GET``).  The *data* argument must be a bytes object in standard
13967db96d56Sopenharmony_ci   :mimetype:`application/x-www-form-urlencoded` format; see the
13977db96d56Sopenharmony_ci   :func:`urllib.parse.urlencode` function.
13987db96d56Sopenharmony_ci
13997db96d56Sopenharmony_ci   :func:`urlretrieve` will raise :exc:`ContentTooShortError` when it detects that
14007db96d56Sopenharmony_ci   the amount of data available  was less than the expected amount (which is the
14017db96d56Sopenharmony_ci   size reported by a  *Content-Length* header). This can occur, for example, when
14027db96d56Sopenharmony_ci   the  download is interrupted.
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci   The *Content-Length* is treated as a lower bound: if there's more data  to read,
14057db96d56Sopenharmony_ci   urlretrieve reads more data, but if less data is available,  it raises the
14067db96d56Sopenharmony_ci   exception.
14077db96d56Sopenharmony_ci
14087db96d56Sopenharmony_ci   You can still retrieve the downloaded data in this case, it is stored  in the
14097db96d56Sopenharmony_ci   :attr:`content` attribute of the exception instance.
14107db96d56Sopenharmony_ci
14117db96d56Sopenharmony_ci   If no *Content-Length* header was supplied, urlretrieve can not check the size
14127db96d56Sopenharmony_ci   of the data it has downloaded, and just returns it.  In this case you just have
14137db96d56Sopenharmony_ci   to assume that the download was successful.
14147db96d56Sopenharmony_ci
14157db96d56Sopenharmony_ci.. function:: urlcleanup()
14167db96d56Sopenharmony_ci
14177db96d56Sopenharmony_ci   Cleans up temporary files that may have been left behind by previous
14187db96d56Sopenharmony_ci   calls to :func:`urlretrieve`.
14197db96d56Sopenharmony_ci
14207db96d56Sopenharmony_ci.. class:: URLopener(proxies=None, **x509)
14217db96d56Sopenharmony_ci
14227db96d56Sopenharmony_ci   .. deprecated:: 3.3
14237db96d56Sopenharmony_ci
14247db96d56Sopenharmony_ci   Base class for opening and reading URLs.  Unless you need to support opening
14257db96d56Sopenharmony_ci   objects using schemes other than :file:`http:`, :file:`ftp:`, or :file:`file:`,
14267db96d56Sopenharmony_ci   you probably want to use :class:`FancyURLopener`.
14277db96d56Sopenharmony_ci
14287db96d56Sopenharmony_ci   By default, the :class:`URLopener` class sends a :mailheader:`User-Agent` header
14297db96d56Sopenharmony_ci   of ``urllib/VVV``, where *VVV* is the :mod:`urllib` version number.
14307db96d56Sopenharmony_ci   Applications can define their own :mailheader:`User-Agent` header by subclassing
14317db96d56Sopenharmony_ci   :class:`URLopener` or :class:`FancyURLopener` and setting the class attribute
14327db96d56Sopenharmony_ci   :attr:`version` to an appropriate string value in the subclass definition.
14337db96d56Sopenharmony_ci
14347db96d56Sopenharmony_ci   The optional *proxies* parameter should be a dictionary mapping scheme names to
14357db96d56Sopenharmony_ci   proxy URLs, where an empty dictionary turns proxies off completely.  Its default
14367db96d56Sopenharmony_ci   value is ``None``, in which case environmental proxy settings will be used if
14377db96d56Sopenharmony_ci   present, as discussed in the definition of :func:`urlopen`, above.
14387db96d56Sopenharmony_ci
14397db96d56Sopenharmony_ci   Additional keyword parameters, collected in *x509*, may be used for
14407db96d56Sopenharmony_ci   authentication of the client when using the :file:`https:` scheme.  The keywords
14417db96d56Sopenharmony_ci   *key_file* and *cert_file* are supported to provide an  SSL key and certificate;
14427db96d56Sopenharmony_ci   both are needed to support client authentication.
14437db96d56Sopenharmony_ci
14447db96d56Sopenharmony_ci   :class:`URLopener` objects will raise an :exc:`OSError` exception if the server
14457db96d56Sopenharmony_ci   returns an error code.
14467db96d56Sopenharmony_ci
14477db96d56Sopenharmony_ci   .. method:: open(fullurl, data=None)
14487db96d56Sopenharmony_ci
14497db96d56Sopenharmony_ci      Open *fullurl* using the appropriate protocol.  This method sets up cache and
14507db96d56Sopenharmony_ci      proxy information, then calls the appropriate open method with its input
14517db96d56Sopenharmony_ci      arguments.  If the scheme is not recognized, :meth:`open_unknown` is called.
14527db96d56Sopenharmony_ci      The *data* argument has the same meaning as the *data* argument of
14537db96d56Sopenharmony_ci      :func:`urlopen`.
14547db96d56Sopenharmony_ci
14557db96d56Sopenharmony_ci      This method always quotes *fullurl* using :func:`~urllib.parse.quote`.
14567db96d56Sopenharmony_ci
14577db96d56Sopenharmony_ci   .. method:: open_unknown(fullurl, data=None)
14587db96d56Sopenharmony_ci
14597db96d56Sopenharmony_ci      Overridable interface to open unknown URL types.
14607db96d56Sopenharmony_ci
14617db96d56Sopenharmony_ci
14627db96d56Sopenharmony_ci   .. method:: retrieve(url, filename=None, reporthook=None, data=None)
14637db96d56Sopenharmony_ci
14647db96d56Sopenharmony_ci      Retrieves the contents of *url* and places it in *filename*.  The return value
14657db96d56Sopenharmony_ci      is a tuple consisting of a local filename and either an
14667db96d56Sopenharmony_ci      :class:`email.message.Message` object containing the response headers (for remote
14677db96d56Sopenharmony_ci      URLs) or ``None`` (for local URLs).  The caller must then open and read the
14687db96d56Sopenharmony_ci      contents of *filename*.  If *filename* is not given and the URL refers to a
14697db96d56Sopenharmony_ci      local file, the input filename is returned.  If the URL is non-local and
14707db96d56Sopenharmony_ci      *filename* is not given, the filename is the output of :func:`tempfile.mktemp`
14717db96d56Sopenharmony_ci      with a suffix that matches the suffix of the last path component of the input
14727db96d56Sopenharmony_ci      URL.  If *reporthook* is given, it must be a function accepting three numeric
14737db96d56Sopenharmony_ci      parameters: A chunk number, the maximum size chunks are read in and the total size of the download
14747db96d56Sopenharmony_ci      (-1 if unknown).  It will be called once at the start and after each chunk of data is read from the
14757db96d56Sopenharmony_ci      network.  *reporthook* is ignored for local URLs.
14767db96d56Sopenharmony_ci
14777db96d56Sopenharmony_ci      If the *url* uses the :file:`http:` scheme identifier, the optional *data*
14787db96d56Sopenharmony_ci      argument may be given to specify a ``POST`` request (normally the request type
14797db96d56Sopenharmony_ci      is ``GET``).  The *data* argument must in standard
14807db96d56Sopenharmony_ci      :mimetype:`application/x-www-form-urlencoded` format; see the
14817db96d56Sopenharmony_ci      :func:`urllib.parse.urlencode` function.
14827db96d56Sopenharmony_ci
14837db96d56Sopenharmony_ci
14847db96d56Sopenharmony_ci   .. attribute:: version
14857db96d56Sopenharmony_ci
14867db96d56Sopenharmony_ci      Variable that specifies the user agent of the opener object.  To get
14877db96d56Sopenharmony_ci      :mod:`urllib` to tell servers that it is a particular user agent, set this in a
14887db96d56Sopenharmony_ci      subclass as a class variable or in the constructor before calling the base
14897db96d56Sopenharmony_ci      constructor.
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci
14927db96d56Sopenharmony_ci.. class:: FancyURLopener(...)
14937db96d56Sopenharmony_ci
14947db96d56Sopenharmony_ci   .. deprecated:: 3.3
14957db96d56Sopenharmony_ci
14967db96d56Sopenharmony_ci   :class:`FancyURLopener` subclasses :class:`URLopener` providing default handling
14977db96d56Sopenharmony_ci   for the following HTTP response codes: 301, 302, 303, 307 and 401.  For the 30x
14987db96d56Sopenharmony_ci   response codes listed above, the :mailheader:`Location` header is used to fetch
14997db96d56Sopenharmony_ci   the actual URL.  For 401 response codes (authentication required), basic HTTP
15007db96d56Sopenharmony_ci   authentication is performed.  For the 30x response codes, recursion is bounded
15017db96d56Sopenharmony_ci   by the value of the *maxtries* attribute, which defaults to 10.
15027db96d56Sopenharmony_ci
15037db96d56Sopenharmony_ci   For all other response codes, the method :meth:`http_error_default` is called
15047db96d56Sopenharmony_ci   which you can override in subclasses to handle the error appropriately.
15057db96d56Sopenharmony_ci
15067db96d56Sopenharmony_ci   .. note::
15077db96d56Sopenharmony_ci
15087db96d56Sopenharmony_ci      According to the letter of :rfc:`2616`, 301 and 302 responses to POST requests
15097db96d56Sopenharmony_ci      must not be automatically redirected without confirmation by the user.  In
15107db96d56Sopenharmony_ci      reality, browsers do allow automatic redirection of these responses, changing
15117db96d56Sopenharmony_ci      the POST to a GET, and :mod:`urllib` reproduces this behaviour.
15127db96d56Sopenharmony_ci
15137db96d56Sopenharmony_ci   The parameters to the constructor are the same as those for :class:`URLopener`.
15147db96d56Sopenharmony_ci
15157db96d56Sopenharmony_ci   .. note::
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci      When performing basic authentication, a :class:`FancyURLopener` instance calls
15187db96d56Sopenharmony_ci      its :meth:`prompt_user_passwd` method.  The default implementation asks the
15197db96d56Sopenharmony_ci      users for the required information on the controlling terminal.  A subclass may
15207db96d56Sopenharmony_ci      override this method to support more appropriate behavior if needed.
15217db96d56Sopenharmony_ci
15227db96d56Sopenharmony_ci   The :class:`FancyURLopener` class offers one additional method that should be
15237db96d56Sopenharmony_ci   overloaded to provide the appropriate behavior:
15247db96d56Sopenharmony_ci
15257db96d56Sopenharmony_ci   .. method:: prompt_user_passwd(host, realm)
15267db96d56Sopenharmony_ci
15277db96d56Sopenharmony_ci      Return information needed to authenticate the user at the given host in the
15287db96d56Sopenharmony_ci      specified security realm.  The return value should be a tuple, ``(user,
15297db96d56Sopenharmony_ci      password)``, which can be used for basic authentication.
15307db96d56Sopenharmony_ci
15317db96d56Sopenharmony_ci      The implementation prompts for this information on the terminal; an application
15327db96d56Sopenharmony_ci      should override this method to use an appropriate interaction model in the local
15337db96d56Sopenharmony_ci      environment.
15347db96d56Sopenharmony_ci
15357db96d56Sopenharmony_ci
15367db96d56Sopenharmony_ci:mod:`urllib.request` Restrictions
15377db96d56Sopenharmony_ci----------------------------------
15387db96d56Sopenharmony_ci
15397db96d56Sopenharmony_ci  .. index::
15407db96d56Sopenharmony_ci     pair: HTTP; protocol
15417db96d56Sopenharmony_ci     pair: FTP; protocol
15427db96d56Sopenharmony_ci
15437db96d56Sopenharmony_ci* Currently, only the following protocols are supported: HTTP (versions 0.9 and
15447db96d56Sopenharmony_ci  1.0), FTP, local files, and data URLs.
15457db96d56Sopenharmony_ci
15467db96d56Sopenharmony_ci  .. versionchanged:: 3.4 Added support for data URLs.
15477db96d56Sopenharmony_ci
15487db96d56Sopenharmony_ci* The caching feature of :func:`urlretrieve` has been disabled until someone
15497db96d56Sopenharmony_ci  finds the time to hack proper processing of Expiration time headers.
15507db96d56Sopenharmony_ci
15517db96d56Sopenharmony_ci* There should be a function to query whether a particular URL is in the cache.
15527db96d56Sopenharmony_ci
15537db96d56Sopenharmony_ci* For backward compatibility, if a URL appears to point to a local file but the
15547db96d56Sopenharmony_ci  file can't be opened, the URL is re-interpreted using the FTP protocol.  This
15557db96d56Sopenharmony_ci  can sometimes cause confusing error messages.
15567db96d56Sopenharmony_ci
15577db96d56Sopenharmony_ci* The :func:`urlopen` and :func:`urlretrieve` functions can cause arbitrarily
15587db96d56Sopenharmony_ci  long delays while waiting for a network connection to be set up.  This means
15597db96d56Sopenharmony_ci  that it is difficult to build an interactive web client using these functions
15607db96d56Sopenharmony_ci  without using threads.
15617db96d56Sopenharmony_ci
15627db96d56Sopenharmony_ci  .. index::
15637db96d56Sopenharmony_ci     single: HTML
15647db96d56Sopenharmony_ci     pair: HTTP; protocol
15657db96d56Sopenharmony_ci
15667db96d56Sopenharmony_ci* The data returned by :func:`urlopen` or :func:`urlretrieve` is the raw data
15677db96d56Sopenharmony_ci  returned by the server.  This may be binary data (such as an image), plain text
15687db96d56Sopenharmony_ci  or (for example) HTML.  The HTTP protocol provides type information in the reply
15697db96d56Sopenharmony_ci  header, which can be inspected by looking at the :mailheader:`Content-Type`
15707db96d56Sopenharmony_ci  header.  If the returned data is HTML, you can use the module
15717db96d56Sopenharmony_ci  :mod:`html.parser` to parse it.
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci  .. index:: single: FTP
15747db96d56Sopenharmony_ci
15757db96d56Sopenharmony_ci* The code handling the FTP protocol cannot differentiate between a file and a
15767db96d56Sopenharmony_ci  directory.  This can lead to unexpected behavior when attempting to read a URL
15777db96d56Sopenharmony_ci  that points to a file that is not accessible.  If the URL ends in a ``/``, it is
15787db96d56Sopenharmony_ci  assumed to refer to a directory and will be handled accordingly.  But if an
15797db96d56Sopenharmony_ci  attempt to read a file leads to a 550 error (meaning the URL cannot be found or
15807db96d56Sopenharmony_ci  is not accessible, often for permission reasons), then the path is treated as a
15817db96d56Sopenharmony_ci  directory in order to handle the case when a directory is specified by a URL but
15827db96d56Sopenharmony_ci  the trailing ``/`` has been left off.  This can cause misleading results when
15837db96d56Sopenharmony_ci  you try to fetch a file whose read permissions make it inaccessible; the FTP
15847db96d56Sopenharmony_ci  code will try to read it, fail with a 550 error, and then perform a directory
15857db96d56Sopenharmony_ci  listing for the unreadable file. If fine-grained control is needed, consider
15867db96d56Sopenharmony_ci  using the :mod:`ftplib` module, subclassing :class:`FancyURLopener`, or changing
15877db96d56Sopenharmony_ci  *_urlopener* to meet your needs.
15887db96d56Sopenharmony_ci
15897db96d56Sopenharmony_ci
15907db96d56Sopenharmony_ci
15917db96d56Sopenharmony_ci:mod:`urllib.response` --- Response classes used by urllib
15927db96d56Sopenharmony_ci==========================================================
15937db96d56Sopenharmony_ci
15947db96d56Sopenharmony_ci.. module:: urllib.response
15957db96d56Sopenharmony_ci   :synopsis: Response classes used by urllib.
15967db96d56Sopenharmony_ci
15977db96d56Sopenharmony_ciThe :mod:`urllib.response` module defines functions and classes which define a
15987db96d56Sopenharmony_ciminimal file-like interface, including ``read()`` and ``readline()``.
15997db96d56Sopenharmony_ciFunctions defined by this module are used internally by the :mod:`urllib.request` module.
16007db96d56Sopenharmony_ciThe typical response object is a :class:`urllib.response.addinfourl` instance:
16017db96d56Sopenharmony_ci
16027db96d56Sopenharmony_ci.. class:: addinfourl
16037db96d56Sopenharmony_ci
16047db96d56Sopenharmony_ci   .. attribute:: url
16057db96d56Sopenharmony_ci
16067db96d56Sopenharmony_ci      URL of the resource retrieved, commonly used to determine if a redirect was followed.
16077db96d56Sopenharmony_ci
16087db96d56Sopenharmony_ci   .. attribute:: headers
16097db96d56Sopenharmony_ci
16107db96d56Sopenharmony_ci      Returns the headers of the response in the form of an :class:`~email.message.EmailMessage` instance.
16117db96d56Sopenharmony_ci
16127db96d56Sopenharmony_ci   .. attribute:: status
16137db96d56Sopenharmony_ci
16147db96d56Sopenharmony_ci      .. versionadded:: 3.9
16157db96d56Sopenharmony_ci
16167db96d56Sopenharmony_ci      Status code returned by server.
16177db96d56Sopenharmony_ci
16187db96d56Sopenharmony_ci   .. method:: geturl()
16197db96d56Sopenharmony_ci
16207db96d56Sopenharmony_ci      .. deprecated:: 3.9
16217db96d56Sopenharmony_ci         Deprecated in favor of :attr:`~addinfourl.url`.
16227db96d56Sopenharmony_ci
16237db96d56Sopenharmony_ci   .. method:: info()
16247db96d56Sopenharmony_ci
16257db96d56Sopenharmony_ci      .. deprecated:: 3.9
16267db96d56Sopenharmony_ci         Deprecated in favor of :attr:`~addinfourl.headers`.
16277db96d56Sopenharmony_ci
16287db96d56Sopenharmony_ci   .. attribute:: code
16297db96d56Sopenharmony_ci
16307db96d56Sopenharmony_ci      .. deprecated:: 3.9
16317db96d56Sopenharmony_ci         Deprecated in favor of :attr:`~addinfourl.status`.
16327db96d56Sopenharmony_ci
16337db96d56Sopenharmony_ci   .. method:: getcode()
16347db96d56Sopenharmony_ci
16357db96d56Sopenharmony_ci      .. deprecated:: 3.9
16367db96d56Sopenharmony_ci         Deprecated in favor of :attr:`~addinfourl.status`.
1637