17db96d56Sopenharmony_ci:mod:`http.cookiejar` --- Cookie handling for HTTP clients 27db96d56Sopenharmony_ci========================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: http.cookiejar 57db96d56Sopenharmony_ci :synopsis: Classes for automatic handling of HTTP cookies. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: John J. Lee <jjl@pobox.com> 87db96d56Sopenharmony_ci.. sectionauthor:: John J. Lee <jjl@pobox.com> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/http/cookiejar.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe :mod:`http.cookiejar` module defines classes for automatic handling of HTTP 157db96d56Sopenharmony_cicookies. It is useful for accessing web sites that require small pieces of data 167db96d56Sopenharmony_ci-- :dfn:`cookies` -- to be set on the client machine by an HTTP response from a 177db96d56Sopenharmony_ciweb server, and then returned to the server in later HTTP requests. 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ciBoth the regular Netscape cookie protocol and the protocol defined by 207db96d56Sopenharmony_ci:rfc:`2965` are handled. RFC 2965 handling is switched off by default. 217db96d56Sopenharmony_ci:rfc:`2109` cookies are parsed as Netscape cookies and subsequently treated 227db96d56Sopenharmony_cieither as Netscape or RFC 2965 cookies according to the 'policy' in effect. 237db96d56Sopenharmony_ciNote that the great majority of cookies on the internet are Netscape cookies. 247db96d56Sopenharmony_ci:mod:`http.cookiejar` attempts to follow the de-facto Netscape cookie protocol (which 257db96d56Sopenharmony_cidiffers substantially from that set out in the original Netscape specification), 267db96d56Sopenharmony_ciincluding taking note of the ``max-age`` and ``port`` cookie-attributes 277db96d56Sopenharmony_ciintroduced with RFC 2965. 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci.. note:: 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci The various named parameters found in :mailheader:`Set-Cookie` and 327db96d56Sopenharmony_ci :mailheader:`Set-Cookie2` headers (eg. ``domain`` and ``expires``) are 337db96d56Sopenharmony_ci conventionally referred to as :dfn:`attributes`. To distinguish them from 347db96d56Sopenharmony_ci Python attributes, the documentation for this module uses the term 357db96d56Sopenharmony_ci :dfn:`cookie-attribute` instead. 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ciThe module defines the following exception: 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci.. exception:: LoadError 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci Instances of :class:`FileCookieJar` raise this exception on failure to load 447db96d56Sopenharmony_ci cookies from a file. :exc:`LoadError` is a subclass of :exc:`OSError`. 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci .. versionchanged:: 3.3 477db96d56Sopenharmony_ci LoadError was made a subclass of :exc:`OSError` instead of 487db96d56Sopenharmony_ci :exc:`IOError`. 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ciThe following classes are provided: 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci.. class:: CookieJar(policy=None) 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci *policy* is an object implementing the :class:`CookiePolicy` interface. 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci The :class:`CookieJar` class stores HTTP cookies. It extracts cookies from HTTP 597db96d56Sopenharmony_ci requests, and returns them in HTTP responses. :class:`CookieJar` instances 607db96d56Sopenharmony_ci automatically expire contained cookies when necessary. Subclasses are also 617db96d56Sopenharmony_ci responsible for storing and retrieving cookies from a file or database. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci.. class:: FileCookieJar(filename=None, delayload=None, policy=None) 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci *policy* is an object implementing the :class:`CookiePolicy` interface. For the 677db96d56Sopenharmony_ci other arguments, see the documentation for the corresponding attributes. 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci A :class:`CookieJar` which can load cookies from, and perhaps save cookies to, a 707db96d56Sopenharmony_ci file on disk. Cookies are **NOT** loaded from the named file until either the 717db96d56Sopenharmony_ci :meth:`load` or :meth:`revert` method is called. Subclasses of this class are 727db96d56Sopenharmony_ci documented in section :ref:`file-cookie-jar-classes`. 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci This should not be initialized directly – use its subclasses below instead. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci .. versionchanged:: 3.8 777db96d56Sopenharmony_ci 787db96d56Sopenharmony_ci The filename parameter supports a :term:`path-like object`. 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci.. class:: CookiePolicy() 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci This class is responsible for deciding whether each cookie should be accepted 847db96d56Sopenharmony_ci from / returned to the server. 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci.. class:: DefaultCookiePolicy( blocked_domains=None, allowed_domains=None, netscape=True, rfc2965=False, rfc2109_as_netscape=None, hide_cookie2=False, strict_domain=False, strict_rfc2965_unverifiable=True, strict_ns_unverifiable=False, strict_ns_domain=DefaultCookiePolicy.DomainLiberal, strict_ns_set_initial_dollar=False, strict_ns_set_path=False, secure_protocols=("https", "wss") ) 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci Constructor arguments should be passed as keyword arguments only. 907db96d56Sopenharmony_ci *blocked_domains* is a sequence of domain names that we never accept cookies 917db96d56Sopenharmony_ci from, nor return cookies to. *allowed_domains* if not :const:`None`, this is a 927db96d56Sopenharmony_ci sequence of the only domains for which we accept and return cookies. 937db96d56Sopenharmony_ci *secure_protocols* is a sequence of protocols for which secure cookies can be 947db96d56Sopenharmony_ci added to. By default *https* and *wss* (secure websocket) are considered 957db96d56Sopenharmony_ci secure protocols. For all other arguments, see the documentation for 967db96d56Sopenharmony_ci :class:`CookiePolicy` and :class:`DefaultCookiePolicy` objects. 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_ci :class:`DefaultCookiePolicy` implements the standard accept / reject rules for 997db96d56Sopenharmony_ci Netscape and :rfc:`2965` cookies. By default, :rfc:`2109` cookies (ie. cookies 1007db96d56Sopenharmony_ci received in a :mailheader:`Set-Cookie` header with a version cookie-attribute of 1017db96d56Sopenharmony_ci 1) are treated according to the RFC 2965 rules. However, if RFC 2965 handling 1027db96d56Sopenharmony_ci is turned off or :attr:`rfc2109_as_netscape` is ``True``, RFC 2109 cookies are 1037db96d56Sopenharmony_ci 'downgraded' by the :class:`CookieJar` instance to Netscape cookies, by 1047db96d56Sopenharmony_ci setting the :attr:`version` attribute of the :class:`Cookie` instance to 0. 1057db96d56Sopenharmony_ci :class:`DefaultCookiePolicy` also provides some parameters to allow some 1067db96d56Sopenharmony_ci fine-tuning of policy. 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci.. class:: Cookie() 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci This class represents Netscape, :rfc:`2109` and :rfc:`2965` cookies. It is not 1127db96d56Sopenharmony_ci expected that users of :mod:`http.cookiejar` construct their own :class:`Cookie` 1137db96d56Sopenharmony_ci instances. Instead, if necessary, call :meth:`make_cookies` on a 1147db96d56Sopenharmony_ci :class:`CookieJar` instance. 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci.. seealso:: 1187db96d56Sopenharmony_ci 1197db96d56Sopenharmony_ci Module :mod:`urllib.request` 1207db96d56Sopenharmony_ci URL opening with automatic cookie handling. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci Module :mod:`http.cookies` 1237db96d56Sopenharmony_ci HTTP cookie classes, principally useful for server-side code. The 1247db96d56Sopenharmony_ci :mod:`http.cookiejar` and :mod:`http.cookies` modules do not depend on each 1257db96d56Sopenharmony_ci other. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci https://curl.se/rfc/cookie_spec.html 1287db96d56Sopenharmony_ci The specification of the original Netscape cookie protocol. Though this is 1297db96d56Sopenharmony_ci still the dominant protocol, the 'Netscape cookie protocol' implemented by all 1307db96d56Sopenharmony_ci the major browsers (and :mod:`http.cookiejar`) only bears a passing resemblance to 1317db96d56Sopenharmony_ci the one sketched out in ``cookie_spec.html``. 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci :rfc:`2109` - HTTP State Management Mechanism 1347db96d56Sopenharmony_ci Obsoleted by :rfc:`2965`. Uses :mailheader:`Set-Cookie` with version=1. 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci :rfc:`2965` - HTTP State Management Mechanism 1377db96d56Sopenharmony_ci The Netscape protocol with the bugs fixed. Uses :mailheader:`Set-Cookie2` in 1387db96d56Sopenharmony_ci place of :mailheader:`Set-Cookie`. Not widely used. 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci http://kristol.org/cookie/errata.html 1417db96d56Sopenharmony_ci Unfinished errata to :rfc:`2965`. 1427db96d56Sopenharmony_ci 1437db96d56Sopenharmony_ci :rfc:`2964` - Use of HTTP State Management 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci.. _cookie-jar-objects: 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ciCookieJar and FileCookieJar Objects 1487db96d56Sopenharmony_ci----------------------------------- 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci:class:`CookieJar` objects support the :term:`iterator` protocol for iterating over 1517db96d56Sopenharmony_cicontained :class:`Cookie` objects. 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci:class:`CookieJar` has the following methods: 1547db96d56Sopenharmony_ci 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci.. method:: CookieJar.add_cookie_header(request) 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci Add correct :mailheader:`Cookie` header to *request*. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci If policy allows (ie. the :attr:`rfc2965` and :attr:`hide_cookie2` attributes of 1617db96d56Sopenharmony_ci the :class:`CookieJar`'s :class:`CookiePolicy` instance are true and false 1627db96d56Sopenharmony_ci respectively), the :mailheader:`Cookie2` header is also added when appropriate. 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci The *request* object (usually a :class:`urllib.request.Request` instance) 1657db96d56Sopenharmony_ci must support the methods :meth:`get_full_url`, :meth:`has_header`, 1667db96d56Sopenharmony_ci :meth:`get_header`, :meth:`header_items`, :meth:`add_unredirected_header` 1677db96d56Sopenharmony_ci and the attributes :attr:`host`, :attr:`!type`, :attr:`unverifiable` 1687db96d56Sopenharmony_ci and :attr:`origin_req_host` as documented by :mod:`urllib.request`. 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci .. versionchanged:: 3.3 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci *request* object needs :attr:`origin_req_host` attribute. Dependency on a 1737db96d56Sopenharmony_ci deprecated method :meth:`get_origin_req_host` has been removed. 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci.. method:: CookieJar.extract_cookies(response, request) 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci Extract cookies from HTTP *response* and store them in the :class:`CookieJar`, 1797db96d56Sopenharmony_ci where allowed by policy. 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci The :class:`CookieJar` will look for allowable :mailheader:`Set-Cookie` and 1827db96d56Sopenharmony_ci :mailheader:`Set-Cookie2` headers in the *response* argument, and store cookies 1837db96d56Sopenharmony_ci as appropriate (subject to the :meth:`CookiePolicy.set_ok` method's approval). 1847db96d56Sopenharmony_ci 1857db96d56Sopenharmony_ci The *response* object (usually the result of a call to 1867db96d56Sopenharmony_ci :meth:`urllib.request.urlopen`, or similar) should support an :meth:`info` 1877db96d56Sopenharmony_ci method, which returns an :class:`email.message.Message` instance. 1887db96d56Sopenharmony_ci 1897db96d56Sopenharmony_ci The *request* object (usually a :class:`urllib.request.Request` instance) 1907db96d56Sopenharmony_ci must support the method :meth:`get_full_url` and the attributes 1917db96d56Sopenharmony_ci :attr:`host`, :attr:`unverifiable` and :attr:`origin_req_host`, 1927db96d56Sopenharmony_ci as documented by :mod:`urllib.request`. The request is used to set 1937db96d56Sopenharmony_ci default values for cookie-attributes as well as for checking that the 1947db96d56Sopenharmony_ci cookie is allowed to be set. 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci .. versionchanged:: 3.3 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci *request* object needs :attr:`origin_req_host` attribute. Dependency on a 1997db96d56Sopenharmony_ci deprecated method :meth:`get_origin_req_host` has been removed. 2007db96d56Sopenharmony_ci 2017db96d56Sopenharmony_ci.. method:: CookieJar.set_policy(policy) 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci Set the :class:`CookiePolicy` instance to be used. 2047db96d56Sopenharmony_ci 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci.. method:: CookieJar.make_cookies(response, request) 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci Return sequence of :class:`Cookie` objects extracted from *response* object. 2097db96d56Sopenharmony_ci 2107db96d56Sopenharmony_ci See the documentation for :meth:`extract_cookies` for the interfaces required of 2117db96d56Sopenharmony_ci the *response* and *request* arguments. 2127db96d56Sopenharmony_ci 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci.. method:: CookieJar.set_cookie_if_ok(cookie, request) 2157db96d56Sopenharmony_ci 2167db96d56Sopenharmony_ci Set a :class:`Cookie` if policy says it's OK to do so. 2177db96d56Sopenharmony_ci 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci.. method:: CookieJar.set_cookie(cookie) 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci Set a :class:`Cookie`, without checking with policy to see whether or not it 2227db96d56Sopenharmony_ci should be set. 2237db96d56Sopenharmony_ci 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci.. method:: CookieJar.clear([domain[, path[, name]]]) 2267db96d56Sopenharmony_ci 2277db96d56Sopenharmony_ci Clear some cookies. 2287db96d56Sopenharmony_ci 2297db96d56Sopenharmony_ci If invoked without arguments, clear all cookies. If given a single argument, 2307db96d56Sopenharmony_ci only cookies belonging to that *domain* will be removed. If given two arguments, 2317db96d56Sopenharmony_ci cookies belonging to the specified *domain* and URL *path* are removed. If 2327db96d56Sopenharmony_ci given three arguments, then the cookie with the specified *domain*, *path* and 2337db96d56Sopenharmony_ci *name* is removed. 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci Raises :exc:`KeyError` if no matching cookie exists. 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci 2387db96d56Sopenharmony_ci.. method:: CookieJar.clear_session_cookies() 2397db96d56Sopenharmony_ci 2407db96d56Sopenharmony_ci Discard all session cookies. 2417db96d56Sopenharmony_ci 2427db96d56Sopenharmony_ci Discards all contained cookies that have a true :attr:`discard` attribute 2437db96d56Sopenharmony_ci (usually because they had either no ``max-age`` or ``expires`` cookie-attribute, 2447db96d56Sopenharmony_ci or an explicit ``discard`` cookie-attribute). For interactive browsers, the end 2457db96d56Sopenharmony_ci of a session usually corresponds to closing the browser window. 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ci Note that the :meth:`save` method won't save session cookies anyway, unless you 2487db96d56Sopenharmony_ci ask otherwise by passing a true *ignore_discard* argument. 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci:class:`FileCookieJar` implements the following additional methods: 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci 2537db96d56Sopenharmony_ci.. method:: FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False) 2547db96d56Sopenharmony_ci 2557db96d56Sopenharmony_ci Save cookies to a file. 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci This base class raises :exc:`NotImplementedError`. Subclasses may leave this 2587db96d56Sopenharmony_ci method unimplemented. 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci *filename* is the name of file in which to save cookies. If *filename* is not 2617db96d56Sopenharmony_ci specified, :attr:`self.filename` is used (whose default is the value passed to 2627db96d56Sopenharmony_ci the constructor, if any); if :attr:`self.filename` is :const:`None`, 2637db96d56Sopenharmony_ci :exc:`ValueError` is raised. 2647db96d56Sopenharmony_ci 2657db96d56Sopenharmony_ci *ignore_discard*: save even cookies set to be discarded. *ignore_expires*: save 2667db96d56Sopenharmony_ci even cookies that have expired 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci The file is overwritten if it already exists, thus wiping all the cookies it 2697db96d56Sopenharmony_ci contains. Saved cookies can be restored later using the :meth:`load` or 2707db96d56Sopenharmony_ci :meth:`revert` methods. 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci 2737db96d56Sopenharmony_ci.. method:: FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False) 2747db96d56Sopenharmony_ci 2757db96d56Sopenharmony_ci Load cookies from a file. 2767db96d56Sopenharmony_ci 2777db96d56Sopenharmony_ci Old cookies are kept unless overwritten by newly loaded ones. 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci Arguments are as for :meth:`save`. 2807db96d56Sopenharmony_ci 2817db96d56Sopenharmony_ci The named file must be in the format understood by the class, or 2827db96d56Sopenharmony_ci :exc:`LoadError` will be raised. Also, :exc:`OSError` may be raised, for 2837db96d56Sopenharmony_ci example if the file does not exist. 2847db96d56Sopenharmony_ci 2857db96d56Sopenharmony_ci .. versionchanged:: 3.3 2867db96d56Sopenharmony_ci :exc:`IOError` used to be raised, it is now an alias of :exc:`OSError`. 2877db96d56Sopenharmony_ci 2887db96d56Sopenharmony_ci 2897db96d56Sopenharmony_ci.. method:: FileCookieJar.revert(filename=None, ignore_discard=False, ignore_expires=False) 2907db96d56Sopenharmony_ci 2917db96d56Sopenharmony_ci Clear all cookies and reload cookies from a saved file. 2927db96d56Sopenharmony_ci 2937db96d56Sopenharmony_ci :meth:`revert` can raise the same exceptions as :meth:`load`. If there is a 2947db96d56Sopenharmony_ci failure, the object's state will not be altered. 2957db96d56Sopenharmony_ci 2967db96d56Sopenharmony_ci:class:`FileCookieJar` instances have the following public attributes: 2977db96d56Sopenharmony_ci 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ci.. attribute:: FileCookieJar.filename 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ci Filename of default file in which to keep cookies. This attribute may be 3027db96d56Sopenharmony_ci assigned to. 3037db96d56Sopenharmony_ci 3047db96d56Sopenharmony_ci 3057db96d56Sopenharmony_ci.. attribute:: FileCookieJar.delayload 3067db96d56Sopenharmony_ci 3077db96d56Sopenharmony_ci If true, load cookies lazily from disk. This attribute should not be assigned 3087db96d56Sopenharmony_ci to. This is only a hint, since this only affects performance, not behaviour 3097db96d56Sopenharmony_ci (unless the cookies on disk are changing). A :class:`CookieJar` object may 3107db96d56Sopenharmony_ci ignore it. None of the :class:`FileCookieJar` classes included in the standard 3117db96d56Sopenharmony_ci library lazily loads cookies. 3127db96d56Sopenharmony_ci 3137db96d56Sopenharmony_ci 3147db96d56Sopenharmony_ci.. _file-cookie-jar-classes: 3157db96d56Sopenharmony_ci 3167db96d56Sopenharmony_ciFileCookieJar subclasses and co-operation with web browsers 3177db96d56Sopenharmony_ci----------------------------------------------------------- 3187db96d56Sopenharmony_ci 3197db96d56Sopenharmony_ciThe following :class:`CookieJar` subclasses are provided for reading and 3207db96d56Sopenharmony_ciwriting. 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ci.. class:: MozillaCookieJar(filename=None, delayload=None, policy=None) 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci A :class:`FileCookieJar` that can load from and save cookies to disk in the 3257db96d56Sopenharmony_ci Mozilla ``cookies.txt`` file format (which is also used by curl and the Lynx 3267db96d56Sopenharmony_ci and Netscape browsers). 3277db96d56Sopenharmony_ci 3287db96d56Sopenharmony_ci .. note:: 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci This loses information about :rfc:`2965` cookies, and also about newer or 3317db96d56Sopenharmony_ci non-standard cookie-attributes such as ``port``. 3327db96d56Sopenharmony_ci 3337db96d56Sopenharmony_ci .. warning:: 3347db96d56Sopenharmony_ci 3357db96d56Sopenharmony_ci Back up your cookies before saving if you have cookies whose loss / corruption 3367db96d56Sopenharmony_ci would be inconvenient (there are some subtleties which may lead to slight 3377db96d56Sopenharmony_ci changes in the file over a load / save round-trip). 3387db96d56Sopenharmony_ci 3397db96d56Sopenharmony_ci Also note that cookies saved while Mozilla is running will get clobbered by 3407db96d56Sopenharmony_ci Mozilla. 3417db96d56Sopenharmony_ci 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci.. class:: LWPCookieJar(filename=None, delayload=None, policy=None) 3447db96d56Sopenharmony_ci 3457db96d56Sopenharmony_ci A :class:`FileCookieJar` that can load from and save cookies to disk in format 3467db96d56Sopenharmony_ci compatible with the libwww-perl library's ``Set-Cookie3`` file format. This is 3477db96d56Sopenharmony_ci convenient if you want to store cookies in a human-readable file. 3487db96d56Sopenharmony_ci 3497db96d56Sopenharmony_ci .. versionchanged:: 3.8 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci The filename parameter supports a :term:`path-like object`. 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci.. _cookie-policy-objects: 3547db96d56Sopenharmony_ci 3557db96d56Sopenharmony_ciCookiePolicy Objects 3567db96d56Sopenharmony_ci-------------------- 3577db96d56Sopenharmony_ci 3587db96d56Sopenharmony_ciObjects implementing the :class:`CookiePolicy` interface have the following 3597db96d56Sopenharmony_cimethods: 3607db96d56Sopenharmony_ci 3617db96d56Sopenharmony_ci 3627db96d56Sopenharmony_ci.. method:: CookiePolicy.set_ok(cookie, request) 3637db96d56Sopenharmony_ci 3647db96d56Sopenharmony_ci Return boolean value indicating whether cookie should be accepted from server. 3657db96d56Sopenharmony_ci 3667db96d56Sopenharmony_ci *cookie* is a :class:`Cookie` instance. *request* is an object 3677db96d56Sopenharmony_ci implementing the interface defined by the documentation for 3687db96d56Sopenharmony_ci :meth:`CookieJar.extract_cookies`. 3697db96d56Sopenharmony_ci 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci.. method:: CookiePolicy.return_ok(cookie, request) 3727db96d56Sopenharmony_ci 3737db96d56Sopenharmony_ci Return boolean value indicating whether cookie should be returned to server. 3747db96d56Sopenharmony_ci 3757db96d56Sopenharmony_ci *cookie* is a :class:`Cookie` instance. *request* is an object 3767db96d56Sopenharmony_ci implementing the interface defined by the documentation for 3777db96d56Sopenharmony_ci :meth:`CookieJar.add_cookie_header`. 3787db96d56Sopenharmony_ci 3797db96d56Sopenharmony_ci 3807db96d56Sopenharmony_ci.. method:: CookiePolicy.domain_return_ok(domain, request) 3817db96d56Sopenharmony_ci 3827db96d56Sopenharmony_ci Return ``False`` if cookies should not be returned, given cookie domain. 3837db96d56Sopenharmony_ci 3847db96d56Sopenharmony_ci This method is an optimization. It removes the need for checking every cookie 3857db96d56Sopenharmony_ci with a particular domain (which might involve reading many files). Returning 3867db96d56Sopenharmony_ci true from :meth:`domain_return_ok` and :meth:`path_return_ok` leaves all the 3877db96d56Sopenharmony_ci work to :meth:`return_ok`. 3887db96d56Sopenharmony_ci 3897db96d56Sopenharmony_ci If :meth:`domain_return_ok` returns true for the cookie domain, 3907db96d56Sopenharmony_ci :meth:`path_return_ok` is called for the cookie path. Otherwise, 3917db96d56Sopenharmony_ci :meth:`path_return_ok` and :meth:`return_ok` are never called for that cookie 3927db96d56Sopenharmony_ci domain. If :meth:`path_return_ok` returns true, :meth:`return_ok` is called 3937db96d56Sopenharmony_ci with the :class:`Cookie` object itself for a full check. Otherwise, 3947db96d56Sopenharmony_ci :meth:`return_ok` is never called for that cookie path. 3957db96d56Sopenharmony_ci 3967db96d56Sopenharmony_ci Note that :meth:`domain_return_ok` is called for every *cookie* domain, not just 3977db96d56Sopenharmony_ci for the *request* domain. For example, the function might be called with both 3987db96d56Sopenharmony_ci ``".example.com"`` and ``"www.example.com"`` if the request domain is 3997db96d56Sopenharmony_ci ``"www.example.com"``. The same goes for :meth:`path_return_ok`. 4007db96d56Sopenharmony_ci 4017db96d56Sopenharmony_ci The *request* argument is as documented for :meth:`return_ok`. 4027db96d56Sopenharmony_ci 4037db96d56Sopenharmony_ci 4047db96d56Sopenharmony_ci.. method:: CookiePolicy.path_return_ok(path, request) 4057db96d56Sopenharmony_ci 4067db96d56Sopenharmony_ci Return ``False`` if cookies should not be returned, given cookie path. 4077db96d56Sopenharmony_ci 4087db96d56Sopenharmony_ci See the documentation for :meth:`domain_return_ok`. 4097db96d56Sopenharmony_ci 4107db96d56Sopenharmony_ciIn addition to implementing the methods above, implementations of the 4117db96d56Sopenharmony_ci:class:`CookiePolicy` interface must also supply the following attributes, 4127db96d56Sopenharmony_ciindicating which protocols should be used, and how. All of these attributes may 4137db96d56Sopenharmony_cibe assigned to. 4147db96d56Sopenharmony_ci 4157db96d56Sopenharmony_ci 4167db96d56Sopenharmony_ci.. attribute:: CookiePolicy.netscape 4177db96d56Sopenharmony_ci 4187db96d56Sopenharmony_ci Implement Netscape protocol. 4197db96d56Sopenharmony_ci 4207db96d56Sopenharmony_ci 4217db96d56Sopenharmony_ci.. attribute:: CookiePolicy.rfc2965 4227db96d56Sopenharmony_ci 4237db96d56Sopenharmony_ci Implement :rfc:`2965` protocol. 4247db96d56Sopenharmony_ci 4257db96d56Sopenharmony_ci 4267db96d56Sopenharmony_ci.. attribute:: CookiePolicy.hide_cookie2 4277db96d56Sopenharmony_ci 4287db96d56Sopenharmony_ci Don't add :mailheader:`Cookie2` header to requests (the presence of this header 4297db96d56Sopenharmony_ci indicates to the server that we understand :rfc:`2965` cookies). 4307db96d56Sopenharmony_ci 4317db96d56Sopenharmony_ciThe most useful way to define a :class:`CookiePolicy` class is by subclassing 4327db96d56Sopenharmony_cifrom :class:`DefaultCookiePolicy` and overriding some or all of the methods 4337db96d56Sopenharmony_ciabove. :class:`CookiePolicy` itself may be used as a 'null policy' to allow 4347db96d56Sopenharmony_cisetting and receiving any and all cookies (this is unlikely to be useful). 4357db96d56Sopenharmony_ci 4367db96d56Sopenharmony_ci 4377db96d56Sopenharmony_ci.. _default-cookie-policy-objects: 4387db96d56Sopenharmony_ci 4397db96d56Sopenharmony_ciDefaultCookiePolicy Objects 4407db96d56Sopenharmony_ci--------------------------- 4417db96d56Sopenharmony_ci 4427db96d56Sopenharmony_ciImplements the standard rules for accepting and returning cookies. 4437db96d56Sopenharmony_ci 4447db96d56Sopenharmony_ciBoth :rfc:`2965` and Netscape cookies are covered. RFC 2965 handling is switched 4457db96d56Sopenharmony_cioff by default. 4467db96d56Sopenharmony_ci 4477db96d56Sopenharmony_ciThe easiest way to provide your own policy is to override this class and call 4487db96d56Sopenharmony_ciits methods in your overridden implementations before adding your own additional 4497db96d56Sopenharmony_cichecks:: 4507db96d56Sopenharmony_ci 4517db96d56Sopenharmony_ci import http.cookiejar 4527db96d56Sopenharmony_ci class MyCookiePolicy(http.cookiejar.DefaultCookiePolicy): 4537db96d56Sopenharmony_ci def set_ok(self, cookie, request): 4547db96d56Sopenharmony_ci if not http.cookiejar.DefaultCookiePolicy.set_ok(self, cookie, request): 4557db96d56Sopenharmony_ci return False 4567db96d56Sopenharmony_ci if i_dont_want_to_store_this_cookie(cookie): 4577db96d56Sopenharmony_ci return False 4587db96d56Sopenharmony_ci return True 4597db96d56Sopenharmony_ci 4607db96d56Sopenharmony_ciIn addition to the features required to implement the :class:`CookiePolicy` 4617db96d56Sopenharmony_ciinterface, this class allows you to block and allow domains from setting and 4627db96d56Sopenharmony_cireceiving cookies. There are also some strictness switches that allow you to 4637db96d56Sopenharmony_citighten up the rather loose Netscape protocol rules a little bit (at the cost of 4647db96d56Sopenharmony_ciblocking some benign cookies). 4657db96d56Sopenharmony_ci 4667db96d56Sopenharmony_ciA domain blocklist and allowlist is provided (both off by default). Only domains 4677db96d56Sopenharmony_cinot in the blocklist and present in the allowlist (if the allowlist is active) 4687db96d56Sopenharmony_ciparticipate in cookie setting and returning. Use the *blocked_domains* 4697db96d56Sopenharmony_ciconstructor argument, and :meth:`blocked_domains` and 4707db96d56Sopenharmony_ci:meth:`set_blocked_domains` methods (and the corresponding argument and methods 4717db96d56Sopenharmony_cifor *allowed_domains*). If you set an allowlist, you can turn it off again by 4727db96d56Sopenharmony_cisetting it to :const:`None`. 4737db96d56Sopenharmony_ci 4747db96d56Sopenharmony_ciDomains in block or allow lists that do not start with a dot must equal the 4757db96d56Sopenharmony_cicookie domain to be matched. For example, ``"example.com"`` matches a blocklist 4767db96d56Sopenharmony_cientry of ``"example.com"``, but ``"www.example.com"`` does not. Domains that do 4777db96d56Sopenharmony_cistart with a dot are matched by more specific domains too. For example, both 4787db96d56Sopenharmony_ci``"www.example.com"`` and ``"www.coyote.example.com"`` match ``".example.com"`` 4797db96d56Sopenharmony_ci(but ``"example.com"`` itself does not). IP addresses are an exception, and 4807db96d56Sopenharmony_cimust match exactly. For example, if blocked_domains contains ``"192.168.1.2"`` 4817db96d56Sopenharmony_ciand ``".168.1.2"``, 192.168.1.2 is blocked, but 193.168.1.2 is not. 4827db96d56Sopenharmony_ci 4837db96d56Sopenharmony_ci:class:`DefaultCookiePolicy` implements the following additional methods: 4847db96d56Sopenharmony_ci 4857db96d56Sopenharmony_ci 4867db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.blocked_domains() 4877db96d56Sopenharmony_ci 4887db96d56Sopenharmony_ci Return the sequence of blocked domains (as a tuple). 4897db96d56Sopenharmony_ci 4907db96d56Sopenharmony_ci 4917db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.set_blocked_domains(blocked_domains) 4927db96d56Sopenharmony_ci 4937db96d56Sopenharmony_ci Set the sequence of blocked domains. 4947db96d56Sopenharmony_ci 4957db96d56Sopenharmony_ci 4967db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.is_blocked(domain) 4977db96d56Sopenharmony_ci 4987db96d56Sopenharmony_ci Return ``True`` if *domain* is on the blocklist for setting or receiving 4997db96d56Sopenharmony_ci cookies. 5007db96d56Sopenharmony_ci 5017db96d56Sopenharmony_ci 5027db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.allowed_domains() 5037db96d56Sopenharmony_ci 5047db96d56Sopenharmony_ci Return :const:`None`, or the sequence of allowed domains (as a tuple). 5057db96d56Sopenharmony_ci 5067db96d56Sopenharmony_ci 5077db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.set_allowed_domains(allowed_domains) 5087db96d56Sopenharmony_ci 5097db96d56Sopenharmony_ci Set the sequence of allowed domains, or :const:`None`. 5107db96d56Sopenharmony_ci 5117db96d56Sopenharmony_ci 5127db96d56Sopenharmony_ci.. method:: DefaultCookiePolicy.is_not_allowed(domain) 5137db96d56Sopenharmony_ci 5147db96d56Sopenharmony_ci Return ``True`` if *domain* is not on the allowlist for setting or receiving 5157db96d56Sopenharmony_ci cookies. 5167db96d56Sopenharmony_ci 5177db96d56Sopenharmony_ci:class:`DefaultCookiePolicy` instances have the following attributes, which are 5187db96d56Sopenharmony_ciall initialised from the constructor arguments of the same name, and which may 5197db96d56Sopenharmony_ciall be assigned to. 5207db96d56Sopenharmony_ci 5217db96d56Sopenharmony_ci 5227db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.rfc2109_as_netscape 5237db96d56Sopenharmony_ci 5247db96d56Sopenharmony_ci If true, request that the :class:`CookieJar` instance downgrade :rfc:`2109` cookies 5257db96d56Sopenharmony_ci (ie. cookies received in a :mailheader:`Set-Cookie` header with a version 5267db96d56Sopenharmony_ci cookie-attribute of 1) to Netscape cookies by setting the version attribute of 5277db96d56Sopenharmony_ci the :class:`Cookie` instance to 0. The default value is :const:`None`, in which 5287db96d56Sopenharmony_ci case RFC 2109 cookies are downgraded if and only if :rfc:`2965` handling is turned 5297db96d56Sopenharmony_ci off. Therefore, RFC 2109 cookies are downgraded by default. 5307db96d56Sopenharmony_ci 5317db96d56Sopenharmony_ci 5327db96d56Sopenharmony_ciGeneral strictness switches: 5337db96d56Sopenharmony_ci 5347db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_domain 5357db96d56Sopenharmony_ci 5367db96d56Sopenharmony_ci Don't allow sites to set two-component domains with country-code top-level 5377db96d56Sopenharmony_ci domains like ``.co.uk``, ``.gov.uk``, ``.co.nz``.etc. This is far from perfect 5387db96d56Sopenharmony_ci and isn't guaranteed to work! 5397db96d56Sopenharmony_ci 5407db96d56Sopenharmony_ci 5417db96d56Sopenharmony_ci:rfc:`2965` protocol strictness switches: 5427db96d56Sopenharmony_ci 5437db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_rfc2965_unverifiable 5447db96d56Sopenharmony_ci 5457db96d56Sopenharmony_ci Follow :rfc:`2965` rules on unverifiable transactions (usually, an unverifiable 5467db96d56Sopenharmony_ci transaction is one resulting from a redirect or a request for an image hosted on 5477db96d56Sopenharmony_ci another site). If this is false, cookies are *never* blocked on the basis of 5487db96d56Sopenharmony_ci verifiability 5497db96d56Sopenharmony_ci 5507db96d56Sopenharmony_ci 5517db96d56Sopenharmony_ciNetscape protocol strictness switches: 5527db96d56Sopenharmony_ci 5537db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_ns_unverifiable 5547db96d56Sopenharmony_ci 5557db96d56Sopenharmony_ci Apply :rfc:`2965` rules on unverifiable transactions even to Netscape cookies. 5567db96d56Sopenharmony_ci 5577db96d56Sopenharmony_ci 5587db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_ns_domain 5597db96d56Sopenharmony_ci 5607db96d56Sopenharmony_ci Flags indicating how strict to be with domain-matching rules for Netscape 5617db96d56Sopenharmony_ci cookies. See below for acceptable values. 5627db96d56Sopenharmony_ci 5637db96d56Sopenharmony_ci 5647db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_ns_set_initial_dollar 5657db96d56Sopenharmony_ci 5667db96d56Sopenharmony_ci Ignore cookies in Set-Cookie: headers that have names starting with ``'$'``. 5677db96d56Sopenharmony_ci 5687db96d56Sopenharmony_ci 5697db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.strict_ns_set_path 5707db96d56Sopenharmony_ci 5717db96d56Sopenharmony_ci Don't allow setting cookies whose path doesn't path-match request URI. 5727db96d56Sopenharmony_ci 5737db96d56Sopenharmony_ci:attr:`strict_ns_domain` is a collection of flags. Its value is constructed by 5747db96d56Sopenharmony_cior-ing together (for example, ``DomainStrictNoDots|DomainStrictNonDomain`` means 5757db96d56Sopenharmony_ciboth flags are set). 5767db96d56Sopenharmony_ci 5777db96d56Sopenharmony_ci 5787db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.DomainStrictNoDots 5797db96d56Sopenharmony_ci 5807db96d56Sopenharmony_ci When setting cookies, the 'host prefix' must not contain a dot (eg. 5817db96d56Sopenharmony_ci ``www.foo.bar.com`` can't set a cookie for ``.bar.com``, because ``www.foo`` 5827db96d56Sopenharmony_ci contains a dot). 5837db96d56Sopenharmony_ci 5847db96d56Sopenharmony_ci 5857db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.DomainStrictNonDomain 5867db96d56Sopenharmony_ci 5877db96d56Sopenharmony_ci Cookies that did not explicitly specify a ``domain`` cookie-attribute can only 5887db96d56Sopenharmony_ci be returned to a domain equal to the domain that set the cookie (eg. 5897db96d56Sopenharmony_ci ``spam.example.com`` won't be returned cookies from ``example.com`` that had no 5907db96d56Sopenharmony_ci ``domain`` cookie-attribute). 5917db96d56Sopenharmony_ci 5927db96d56Sopenharmony_ci 5937db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.DomainRFC2965Match 5947db96d56Sopenharmony_ci 5957db96d56Sopenharmony_ci When setting cookies, require a full :rfc:`2965` domain-match. 5967db96d56Sopenharmony_ci 5977db96d56Sopenharmony_ciThe following attributes are provided for convenience, and are the most useful 5987db96d56Sopenharmony_cicombinations of the above flags: 5997db96d56Sopenharmony_ci 6007db96d56Sopenharmony_ci 6017db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.DomainLiberal 6027db96d56Sopenharmony_ci 6037db96d56Sopenharmony_ci Equivalent to 0 (ie. all of the above Netscape domain strictness flags switched 6047db96d56Sopenharmony_ci off). 6057db96d56Sopenharmony_ci 6067db96d56Sopenharmony_ci 6077db96d56Sopenharmony_ci.. attribute:: DefaultCookiePolicy.DomainStrict 6087db96d56Sopenharmony_ci 6097db96d56Sopenharmony_ci Equivalent to ``DomainStrictNoDots|DomainStrictNonDomain``. 6107db96d56Sopenharmony_ci 6117db96d56Sopenharmony_ci 6127db96d56Sopenharmony_ciCookie Objects 6137db96d56Sopenharmony_ci-------------- 6147db96d56Sopenharmony_ci 6157db96d56Sopenharmony_ci:class:`Cookie` instances have Python attributes roughly corresponding to the 6167db96d56Sopenharmony_cistandard cookie-attributes specified in the various cookie standards. The 6177db96d56Sopenharmony_cicorrespondence is not one-to-one, because there are complicated rules for 6187db96d56Sopenharmony_ciassigning default values, because the ``max-age`` and ``expires`` 6197db96d56Sopenharmony_cicookie-attributes contain equivalent information, and because :rfc:`2109` cookies 6207db96d56Sopenharmony_cimay be 'downgraded' by :mod:`http.cookiejar` from version 1 to version 0 (Netscape) 6217db96d56Sopenharmony_cicookies. 6227db96d56Sopenharmony_ci 6237db96d56Sopenharmony_ciAssignment to these attributes should not be necessary other than in rare 6247db96d56Sopenharmony_cicircumstances in a :class:`CookiePolicy` method. The class does not enforce 6257db96d56Sopenharmony_ciinternal consistency, so you should know what you're doing if you do that. 6267db96d56Sopenharmony_ci 6277db96d56Sopenharmony_ci 6287db96d56Sopenharmony_ci.. attribute:: Cookie.version 6297db96d56Sopenharmony_ci 6307db96d56Sopenharmony_ci Integer or :const:`None`. Netscape cookies have :attr:`version` 0. :rfc:`2965` and 6317db96d56Sopenharmony_ci :rfc:`2109` cookies have a ``version`` cookie-attribute of 1. However, note that 6327db96d56Sopenharmony_ci :mod:`http.cookiejar` may 'downgrade' RFC 2109 cookies to Netscape cookies, in which 6337db96d56Sopenharmony_ci case :attr:`version` is 0. 6347db96d56Sopenharmony_ci 6357db96d56Sopenharmony_ci 6367db96d56Sopenharmony_ci.. attribute:: Cookie.name 6377db96d56Sopenharmony_ci 6387db96d56Sopenharmony_ci Cookie name (a string). 6397db96d56Sopenharmony_ci 6407db96d56Sopenharmony_ci 6417db96d56Sopenharmony_ci.. attribute:: Cookie.value 6427db96d56Sopenharmony_ci 6437db96d56Sopenharmony_ci Cookie value (a string), or :const:`None`. 6447db96d56Sopenharmony_ci 6457db96d56Sopenharmony_ci 6467db96d56Sopenharmony_ci.. attribute:: Cookie.port 6477db96d56Sopenharmony_ci 6487db96d56Sopenharmony_ci String representing a port or a set of ports (eg. '80', or '80,8080'), or 6497db96d56Sopenharmony_ci :const:`None`. 6507db96d56Sopenharmony_ci 6517db96d56Sopenharmony_ci 6527db96d56Sopenharmony_ci.. attribute:: Cookie.path 6537db96d56Sopenharmony_ci 6547db96d56Sopenharmony_ci Cookie path (a string, eg. ``'/acme/rocket_launchers'``). 6557db96d56Sopenharmony_ci 6567db96d56Sopenharmony_ci 6577db96d56Sopenharmony_ci.. attribute:: Cookie.secure 6587db96d56Sopenharmony_ci 6597db96d56Sopenharmony_ci ``True`` if cookie should only be returned over a secure connection. 6607db96d56Sopenharmony_ci 6617db96d56Sopenharmony_ci 6627db96d56Sopenharmony_ci.. attribute:: Cookie.expires 6637db96d56Sopenharmony_ci 6647db96d56Sopenharmony_ci Integer expiry date in seconds since epoch, or :const:`None`. See also the 6657db96d56Sopenharmony_ci :meth:`is_expired` method. 6667db96d56Sopenharmony_ci 6677db96d56Sopenharmony_ci 6687db96d56Sopenharmony_ci.. attribute:: Cookie.discard 6697db96d56Sopenharmony_ci 6707db96d56Sopenharmony_ci ``True`` if this is a session cookie. 6717db96d56Sopenharmony_ci 6727db96d56Sopenharmony_ci 6737db96d56Sopenharmony_ci.. attribute:: Cookie.comment 6747db96d56Sopenharmony_ci 6757db96d56Sopenharmony_ci String comment from the server explaining the function of this cookie, or 6767db96d56Sopenharmony_ci :const:`None`. 6777db96d56Sopenharmony_ci 6787db96d56Sopenharmony_ci 6797db96d56Sopenharmony_ci.. attribute:: Cookie.comment_url 6807db96d56Sopenharmony_ci 6817db96d56Sopenharmony_ci URL linking to a comment from the server explaining the function of this cookie, 6827db96d56Sopenharmony_ci or :const:`None`. 6837db96d56Sopenharmony_ci 6847db96d56Sopenharmony_ci 6857db96d56Sopenharmony_ci.. attribute:: Cookie.rfc2109 6867db96d56Sopenharmony_ci 6877db96d56Sopenharmony_ci ``True`` if this cookie was received as an :rfc:`2109` cookie (ie. the cookie 6887db96d56Sopenharmony_ci arrived in a :mailheader:`Set-Cookie` header, and the value of the Version 6897db96d56Sopenharmony_ci cookie-attribute in that header was 1). This attribute is provided because 6907db96d56Sopenharmony_ci :mod:`http.cookiejar` may 'downgrade' RFC 2109 cookies to Netscape cookies, in 6917db96d56Sopenharmony_ci which case :attr:`version` is 0. 6927db96d56Sopenharmony_ci 6937db96d56Sopenharmony_ci 6947db96d56Sopenharmony_ci.. attribute:: Cookie.port_specified 6957db96d56Sopenharmony_ci 6967db96d56Sopenharmony_ci ``True`` if a port or set of ports was explicitly specified by the server (in the 6977db96d56Sopenharmony_ci :mailheader:`Set-Cookie` / :mailheader:`Set-Cookie2` header). 6987db96d56Sopenharmony_ci 6997db96d56Sopenharmony_ci 7007db96d56Sopenharmony_ci.. attribute:: Cookie.domain_specified 7017db96d56Sopenharmony_ci 7027db96d56Sopenharmony_ci ``True`` if a domain was explicitly specified by the server. 7037db96d56Sopenharmony_ci 7047db96d56Sopenharmony_ci 7057db96d56Sopenharmony_ci.. attribute:: Cookie.domain_initial_dot 7067db96d56Sopenharmony_ci 7077db96d56Sopenharmony_ci ``True`` if the domain explicitly specified by the server began with a dot 7087db96d56Sopenharmony_ci (``'.'``). 7097db96d56Sopenharmony_ci 7107db96d56Sopenharmony_ciCookies may have additional non-standard cookie-attributes. These may be 7117db96d56Sopenharmony_ciaccessed using the following methods: 7127db96d56Sopenharmony_ci 7137db96d56Sopenharmony_ci 7147db96d56Sopenharmony_ci.. method:: Cookie.has_nonstandard_attr(name) 7157db96d56Sopenharmony_ci 7167db96d56Sopenharmony_ci Return ``True`` if cookie has the named cookie-attribute. 7177db96d56Sopenharmony_ci 7187db96d56Sopenharmony_ci 7197db96d56Sopenharmony_ci.. method:: Cookie.get_nonstandard_attr(name, default=None) 7207db96d56Sopenharmony_ci 7217db96d56Sopenharmony_ci If cookie has the named cookie-attribute, return its value. Otherwise, return 7227db96d56Sopenharmony_ci *default*. 7237db96d56Sopenharmony_ci 7247db96d56Sopenharmony_ci 7257db96d56Sopenharmony_ci.. method:: Cookie.set_nonstandard_attr(name, value) 7267db96d56Sopenharmony_ci 7277db96d56Sopenharmony_ci Set the value of the named cookie-attribute. 7287db96d56Sopenharmony_ci 7297db96d56Sopenharmony_ciThe :class:`Cookie` class also defines the following method: 7307db96d56Sopenharmony_ci 7317db96d56Sopenharmony_ci 7327db96d56Sopenharmony_ci.. method:: Cookie.is_expired(now=None) 7337db96d56Sopenharmony_ci 7347db96d56Sopenharmony_ci ``True`` if cookie has passed the time at which the server requested it should 7357db96d56Sopenharmony_ci expire. If *now* is given (in seconds since the epoch), return whether the 7367db96d56Sopenharmony_ci cookie has expired at the specified time. 7377db96d56Sopenharmony_ci 7387db96d56Sopenharmony_ci 7397db96d56Sopenharmony_ciExamples 7407db96d56Sopenharmony_ci-------- 7417db96d56Sopenharmony_ci 7427db96d56Sopenharmony_ciThe first example shows the most common usage of :mod:`http.cookiejar`:: 7437db96d56Sopenharmony_ci 7447db96d56Sopenharmony_ci import http.cookiejar, urllib.request 7457db96d56Sopenharmony_ci cj = http.cookiejar.CookieJar() 7467db96d56Sopenharmony_ci opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 7477db96d56Sopenharmony_ci r = opener.open("http://example.com/") 7487db96d56Sopenharmony_ci 7497db96d56Sopenharmony_ciThis example illustrates how to open a URL using your Netscape, Mozilla, or Lynx 7507db96d56Sopenharmony_cicookies (assumes Unix/Netscape convention for location of the cookies file):: 7517db96d56Sopenharmony_ci 7527db96d56Sopenharmony_ci import os, http.cookiejar, urllib.request 7537db96d56Sopenharmony_ci cj = http.cookiejar.MozillaCookieJar() 7547db96d56Sopenharmony_ci cj.load(os.path.join(os.path.expanduser("~"), ".netscape", "cookies.txt")) 7557db96d56Sopenharmony_ci opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 7567db96d56Sopenharmony_ci r = opener.open("http://example.com/") 7577db96d56Sopenharmony_ci 7587db96d56Sopenharmony_ciThe next example illustrates the use of :class:`DefaultCookiePolicy`. Turn on 7597db96d56Sopenharmony_ci:rfc:`2965` cookies, be more strict about domains when setting and returning 7607db96d56Sopenharmony_ciNetscape cookies, and block some domains from setting cookies or having them 7617db96d56Sopenharmony_cireturned:: 7627db96d56Sopenharmony_ci 7637db96d56Sopenharmony_ci import urllib.request 7647db96d56Sopenharmony_ci from http.cookiejar import CookieJar, DefaultCookiePolicy 7657db96d56Sopenharmony_ci policy = DefaultCookiePolicy( 7667db96d56Sopenharmony_ci rfc2965=True, strict_ns_domain=Policy.DomainStrict, 7677db96d56Sopenharmony_ci blocked_domains=["ads.net", ".ads.net"]) 7687db96d56Sopenharmony_ci cj = CookieJar(policy) 7697db96d56Sopenharmony_ci opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 7707db96d56Sopenharmony_ci r = opener.open("http://example.com/") 771