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