1 :mod:`cookielib` --- Cookie handling for HTTP clients 2 ===================================================== 3 4 .. module:: cookielib 5 :synopsis: Classes for automatic handling of HTTP cookies. 6 .. moduleauthor:: John J. Lee <jjl (a] pobox.com> 7 .. sectionauthor:: John J. Lee <jjl (a] pobox.com> 8 9 .. note:: 10 The :mod:`cookielib` module has been renamed to :mod:`http.cookiejar` in 11 Python 3. The :term:`2to3` tool will automatically adapt imports when 12 converting your sources to Python 3. 13 14 .. versionadded:: 2.4 15 16 **Source code:** :source:`Lib/cookielib.py` 17 18 -------------- 19 20 The :mod:`cookielib` module defines classes for automatic handling of HTTP 21 cookies. It is useful for accessing web sites that require small pieces of data 22 -- :dfn:`cookies` -- to be set on the client machine by an HTTP response from a 23 web server, and then returned to the server in later HTTP requests. 24 25 Both the regular Netscape cookie protocol and the protocol defined by 26 :rfc:`2965` are handled. RFC 2965 handling is switched off by default. 27 :rfc:`2109` cookies are parsed as Netscape cookies and subsequently treated 28 either as Netscape or RFC 2965 cookies according to the 'policy' in effect. 29 Note that the great majority of cookies on the Internet are Netscape cookies. 30 :mod:`cookielib` attempts to follow the de-facto Netscape cookie protocol (which 31 differs substantially from that set out in the original Netscape specification), 32 including taking note of the ``max-age`` and ``port`` cookie-attributes 33 introduced with RFC 2965. 34 35 .. note:: 36 37 The various named parameters found in :mailheader:`Set-Cookie` and 38 :mailheader:`Set-Cookie2` headers (eg. ``domain`` and ``expires``) are 39 conventionally referred to as :dfn:`attributes`. To distinguish them from 40 Python attributes, the documentation for this module uses the term 41 :dfn:`cookie-attribute` instead. 42 43 44 The module defines the following exception: 45 46 47 .. exception:: LoadError 48 49 Instances of :class:`FileCookieJar` raise this exception on failure to load 50 cookies from a file. 51 52 .. note:: 53 54 For backwards-compatibility with Python 2.4 (which raised an :exc:`IOError`), 55 :exc:`LoadError` is a subclass of :exc:`IOError`. 56 57 58 The following classes are provided: 59 60 61 .. class:: CookieJar(policy=None) 62 63 *policy* is an object implementing the :class:`CookiePolicy` interface. 64 65 The :class:`CookieJar` class stores HTTP cookies. It extracts cookies from HTTP 66 requests, and returns them in HTTP responses. :class:`CookieJar` instances 67 automatically expire contained cookies when necessary. Subclasses are also 68 responsible for storing and retrieving cookies from a file or database. 69 70 71 .. class:: FileCookieJar(filename, delayload=None, policy=None) 72 73 *policy* is an object implementing the :class:`CookiePolicy` interface. For the 74 other arguments, see the documentation for the corresponding attributes. 75 76 A :class:`CookieJar` which can load cookies from, and perhaps save cookies to, a 77 file on disk. Cookies are **NOT** loaded from the named file until either the 78 :meth:`load` or :meth:`revert` method is called. Subclasses of this class are 79 documented in section :ref:`file-cookie-jar-classes`. 80 81 82 .. class:: CookiePolicy() 83 84 This class is responsible for deciding whether each cookie should be accepted 85 from / returned to the server. 86 87 88 .. 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 ) 89 90 Constructor arguments should be passed as keyword arguments only. 91 *blocked_domains* is a sequence of domain names that we never accept cookies 92 from, nor return cookies to. *allowed_domains* if not :const:`None`, this is a 93 sequence of the only domains for which we accept and return cookies. For all 94 other arguments, see the documentation for :class:`CookiePolicy` and 95 :class:`DefaultCookiePolicy` objects. 96 97 :class:`DefaultCookiePolicy` implements the standard accept / reject rules for 98 Netscape and RFC 2965 cookies. By default, RFC 2109 cookies (ie. cookies 99 received in a :mailheader:`Set-Cookie` header with a version cookie-attribute of 100 1) are treated according to the RFC 2965 rules. However, if RFC 2965 handling 101 is turned off or :attr:`rfc2109_as_netscape` is ``True``, RFC 2109 cookies are 102 'downgraded' by the :class:`CookieJar` instance to Netscape cookies, by 103 setting the :attr:`version` attribute of the :class:`~cookielib.Cookie` instance to 0. 104 :class:`DefaultCookiePolicy` also provides some parameters to allow some 105 fine-tuning of policy. 106 107 108 .. class:: Cookie() 109 110 This class represents Netscape, RFC 2109 and RFC 2965 cookies. It is not 111 expected that users of :mod:`cookielib` construct their own :class:`~cookielib.Cookie` 112 instances. Instead, if necessary, call :meth:`make_cookies` on a 113 :class:`CookieJar` instance. 114 115 116 .. seealso:: 117 118 Module :mod:`urllib2` 119 URL opening with automatic cookie handling. 120 121 Module :mod:`Cookie` 122 HTTP cookie classes, principally useful for server-side code. The 123 :mod:`cookielib` and :mod:`Cookie` modules do not depend on each other. 124 125 https://curl.haxx.se/rfc/cookie_spec.html 126 The specification of the original Netscape cookie protocol. Though this is 127 still the dominant protocol, the 'Netscape cookie protocol' implemented by all 128 the major browsers (and :mod:`cookielib`) only bears a passing resemblance to 129 the one sketched out in ``cookie_spec.html``. 130 131 :rfc:`2109` - HTTP State Management Mechanism 132 Obsoleted by RFC 2965. Uses :mailheader:`Set-Cookie` with version=1. 133 134 :rfc:`2965` - HTTP State Management Mechanism 135 The Netscape protocol with the bugs fixed. Uses :mailheader:`Set-Cookie2` in 136 place of :mailheader:`Set-Cookie`. Not widely used. 137 138 http://kristol.org/cookie/errata.html 139 Unfinished errata to RFC 2965. 140 141 :rfc:`2964` - Use of HTTP State Management 142 143 .. _cookie-jar-objects: 144 145 CookieJar and FileCookieJar Objects 146 ----------------------------------- 147 148 :class:`CookieJar` objects support the :term:`iterator` protocol for iterating over 149 contained :class:`~cookielib.Cookie` objects. 150 151 :class:`CookieJar` has the following methods: 152 153 154 .. method:: CookieJar.add_cookie_header(request) 155 156 Add correct :mailheader:`Cookie` header to *request*. 157 158 If policy allows (ie. the :attr:`rfc2965` and :attr:`hide_cookie2` attributes of 159 the :class:`CookieJar`'s :class:`CookiePolicy` instance are true and false 160 respectively), the :mailheader:`Cookie2` header is also added when appropriate. 161 162 The *request* object (usually a :class:`urllib2.Request` instance) must support 163 the methods :meth:`get_full_url`, :meth:`get_host`, :meth:`get_type`, 164 :meth:`unverifiable`, :meth:`get_origin_req_host`, :meth:`has_header`, 165 :meth:`get_header`, :meth:`header_items`, and :meth:`add_unredirected_header`,as 166 documented by :mod:`urllib2`. 167 168 169 .. method:: CookieJar.extract_cookies(response, request) 170 171 Extract cookies from HTTP *response* and store them in the :class:`CookieJar`, 172 where allowed by policy. 173 174 The :class:`CookieJar` will look for allowable :mailheader:`Set-Cookie` and 175 :mailheader:`Set-Cookie2` headers in the *response* argument, and store cookies 176 as appropriate (subject to the :meth:`CookiePolicy.set_ok` method's approval). 177 178 The *response* object (usually the result of a call to :meth:`urllib2.urlopen`, 179 or similar) should support an :meth:`info` method, which returns an object with 180 a :meth:`getallmatchingheaders` method (usually a :class:`mimetools.Message` 181 instance). 182 183 The *request* object (usually a :class:`urllib2.Request` instance) must support 184 the methods :meth:`get_full_url`, :meth:`get_host`, :meth:`unverifiable`, and 185 :meth:`get_origin_req_host`, as documented by :mod:`urllib2`. The request is 186 used to set default values for cookie-attributes as well as for checking that 187 the cookie is allowed to be set. 188 189 190 .. method:: CookieJar.set_policy(policy) 191 192 Set the :class:`CookiePolicy` instance to be used. 193 194 195 .. method:: CookieJar.make_cookies(response, request) 196 197 Return sequence of :class:`~cookielib.Cookie` objects extracted from *response* object. 198 199 See the documentation for :meth:`extract_cookies` for the interfaces required of 200 the *response* and *request* arguments. 201 202 203 .. method:: CookieJar.set_cookie_if_ok(cookie, request) 204 205 Set a :class:`~cookielib.Cookie` if policy says it's OK to do so. 206 207 208 .. method:: CookieJar.set_cookie(cookie) 209 210 Set a :class:`~cookielib.Cookie`, without checking with policy to see whether or not it 211 should be set. 212 213 214 .. method:: CookieJar.clear([domain[, path[, name]]]) 215 216 Clear some cookies. 217 218 If invoked without arguments, clear all cookies. If given a single argument, 219 only cookies belonging to that *domain* will be removed. If given two arguments, 220 cookies belonging to the specified *domain* and URL *path* are removed. If 221 given three arguments, then the cookie with the specified *domain*, *path* and 222 *name* is removed. 223 224 Raises :exc:`KeyError` if no matching cookie exists. 225 226 227 .. method:: CookieJar.clear_session_cookies() 228 229 Discard all session cookies. 230 231 Discards all contained cookies that have a true :attr:`discard` attribute 232 (usually because they had either no ``max-age`` or ``expires`` cookie-attribute, 233 or an explicit ``discard`` cookie-attribute). For interactive browsers, the end 234 of a session usually corresponds to closing the browser window. 235 236 Note that the :meth:`save` method won't save session cookies anyway, unless you 237 ask otherwise by passing a true *ignore_discard* argument. 238 239 :class:`FileCookieJar` implements the following additional methods: 240 241 242 .. method:: FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False) 243 244 Save cookies to a file. 245 246 This base class raises :exc:`NotImplementedError`. Subclasses may leave this 247 method unimplemented. 248 249 *filename* is the name of file in which to save cookies. If *filename* is not 250 specified, :attr:`self.filename` is used (whose default is the value passed to 251 the constructor, if any); if :attr:`self.filename` is :const:`None`, 252 :exc:`ValueError` is raised. 253 254 *ignore_discard*: save even cookies set to be discarded. *ignore_expires*: save 255 even cookies that have expired 256 257 The file is overwritten if it already exists, thus wiping all the cookies it 258 contains. Saved cookies can be restored later using the :meth:`load` or 259 :meth:`revert` methods. 260 261 262 .. method:: FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False) 263 264 Load cookies from a file. 265 266 Old cookies are kept unless overwritten by newly loaded ones. 267 268 Arguments are as for :meth:`save`. 269 270 The named file must be in the format understood by the class, or 271 :exc:`LoadError` will be raised. Also, :exc:`IOError` may be raised, for 272 example if the file does not exist. 273 274 .. note:: 275 276 For backwards-compatibility with Python 2.4 (which raised an :exc:`IOError`), 277 :exc:`LoadError` is a subclass of :exc:`IOError`. 278 279 280 .. method:: FileCookieJar.revert(filename=None, ignore_discard=False, ignore_expires=False) 281 282 Clear all cookies and reload cookies from a saved file. 283 284 :meth:`revert` can raise the same exceptions as :meth:`load`. If there is a 285 failure, the object's state will not be altered. 286 287 :class:`FileCookieJar` instances have the following public attributes: 288 289 290 .. attribute:: FileCookieJar.filename 291 292 Filename of default file in which to keep cookies. This attribute may be 293 assigned to. 294 295 296 .. attribute:: FileCookieJar.delayload 297 298 If true, load cookies lazily from disk. This attribute should not be assigned 299 to. This is only a hint, since this only affects performance, not behaviour 300 (unless the cookies on disk are changing). A :class:`CookieJar` object may 301 ignore it. None of the :class:`FileCookieJar` classes included in the standard 302 library lazily loads cookies. 303 304 305 .. _file-cookie-jar-classes: 306 307 FileCookieJar subclasses and co-operation with web browsers 308 ----------------------------------------------------------- 309 310 The following :class:`CookieJar` subclasses are provided for reading and 311 writing. 312 313 .. class:: MozillaCookieJar(filename, delayload=None, policy=None) 314 315 A :class:`FileCookieJar` that can load from and save cookies to disk in the 316 Mozilla ``cookies.txt`` file format (which is also used by the Lynx and Netscape 317 browsers). 318 319 .. note:: 320 321 Version 3 of the Firefox web browser no longer writes cookies in the 322 ``cookies.txt`` file format. 323 324 .. note:: 325 326 This loses information about RFC 2965 cookies, and also about newer or 327 non-standard cookie-attributes such as ``port``. 328 329 .. warning:: 330 331 Back up your cookies before saving if you have cookies whose loss / corruption 332 would be inconvenient (there are some subtleties which may lead to slight 333 changes in the file over a load / save round-trip). 334 335 Also note that cookies saved while Mozilla is running will get clobbered by 336 Mozilla. 337 338 339 .. class:: LWPCookieJar(filename, delayload=None, policy=None) 340 341 A :class:`FileCookieJar` that can load from and save cookies to disk in format 342 compatible with the libwww-perl library's ``Set-Cookie3`` file format. This is 343 convenient if you want to store cookies in a human-readable file. 344 345 346 .. _cookie-policy-objects: 347 348 CookiePolicy Objects 349 -------------------- 350 351 Objects implementing the :class:`CookiePolicy` interface have the following 352 methods: 353 354 355 .. method:: CookiePolicy.set_ok(cookie, request) 356 357 Return boolean value indicating whether cookie should be accepted from server. 358 359 *cookie* is a :class:`cookielib.Cookie` instance. *request* is an object 360 implementing the interface defined by the documentation for 361 :meth:`CookieJar.extract_cookies`. 362 363 364 .. method:: CookiePolicy.return_ok(cookie, request) 365 366 Return boolean value indicating whether cookie should be returned to server. 367 368 *cookie* is a :class:`cookielib.Cookie` instance. *request* is an object 369 implementing the interface defined by the documentation for 370 :meth:`CookieJar.add_cookie_header`. 371 372 373 .. method:: CookiePolicy.domain_return_ok(domain, request) 374 375 Return false if cookies should not be returned, given cookie domain. 376 377 This method is an optimization. It removes the need for checking every cookie 378 with a particular domain (which might involve reading many files). Returning 379 true from :meth:`domain_return_ok` and :meth:`path_return_ok` leaves all the 380 work to :meth:`return_ok`. 381 382 If :meth:`domain_return_ok` returns true for the cookie domain, 383 :meth:`path_return_ok` is called for the cookie path. Otherwise, 384 :meth:`path_return_ok` and :meth:`return_ok` are never called for that cookie 385 domain. If :meth:`path_return_ok` returns true, :meth:`return_ok` is called 386 with the :class:`~cookielib.Cookie` object itself for a full check. Otherwise, 387 :meth:`return_ok` is never called for that cookie path. 388 389 Note that :meth:`domain_return_ok` is called for every *cookie* domain, not just 390 for the *request* domain. For example, the function might be called with both 391 ``".example.com"`` and ``"www.example.com"`` if the request domain is 392 ``"www.example.com"``. The same goes for :meth:`path_return_ok`. 393 394 The *request* argument is as documented for :meth:`return_ok`. 395 396 397 .. method:: CookiePolicy.path_return_ok(path, request) 398 399 Return false if cookies should not be returned, given cookie path. 400 401 See the documentation for :meth:`domain_return_ok`. 402 403 In addition to implementing the methods above, implementations of the 404 :class:`CookiePolicy` interface must also supply the following attributes, 405 indicating which protocols should be used, and how. All of these attributes may 406 be assigned to. 407 408 409 .. attribute:: CookiePolicy.netscape 410 411 Implement Netscape protocol. 412 413 414 .. attribute:: CookiePolicy.rfc2965 415 416 Implement RFC 2965 protocol. 417 418 419 .. attribute:: CookiePolicy.hide_cookie2 420 421 Don't add :mailheader:`Cookie2` header to requests (the presence of this header 422 indicates to the server that we understand RFC 2965 cookies). 423 424 The most useful way to define a :class:`CookiePolicy` class is by subclassing 425 from :class:`DefaultCookiePolicy` and overriding some or all of the methods 426 above. :class:`CookiePolicy` itself may be used as a 'null policy' to allow 427 setting and receiving any and all cookies (this is unlikely to be useful). 428 429 430 .. _default-cookie-policy-objects: 431 432 DefaultCookiePolicy Objects 433 --------------------------- 434 435 Implements the standard rules for accepting and returning cookies. 436 437 Both RFC 2965 and Netscape cookies are covered. RFC 2965 handling is switched 438 off by default. 439 440 The easiest way to provide your own policy is to override this class and call 441 its methods in your overridden implementations before adding your own additional 442 checks:: 443 444 import cookielib 445 class MyCookiePolicy(cookielib.DefaultCookiePolicy): 446 def set_ok(self, cookie, request): 447 if not cookielib.DefaultCookiePolicy.set_ok(self, cookie, request): 448 return False 449 if i_dont_want_to_store_this_cookie(cookie): 450 return False 451 return True 452 453 In addition to the features required to implement the :class:`CookiePolicy` 454 interface, this class allows you to block and allow domains from setting and 455 receiving cookies. There are also some strictness switches that allow you to 456 tighten up the rather loose Netscape protocol rules a little bit (at the cost of 457 blocking some benign cookies). 458 459 A domain blacklist and whitelist is provided (both off by default). Only domains 460 not in the blacklist and present in the whitelist (if the whitelist is active) 461 participate in cookie setting and returning. Use the *blocked_domains* 462 constructor argument, and :meth:`blocked_domains` and 463 :meth:`set_blocked_domains` methods (and the corresponding argument and methods 464 for *allowed_domains*). If you set a whitelist, you can turn it off again by 465 setting it to :const:`None`. 466 467 Domains in block or allow lists that do not start with a dot must equal the 468 cookie domain to be matched. For example, ``"example.com"`` matches a blacklist 469 entry of ``"example.com"``, but ``"www.example.com"`` does not. Domains that do 470 start with a dot are matched by more specific domains too. For example, both 471 ``"www.example.com"`` and ``"www.coyote.example.com"`` match ``".example.com"`` 472 (but ``"example.com"`` itself does not). IP addresses are an exception, and 473 must match exactly. For example, if blocked_domains contains ``"192.168.1.2"`` 474 and ``".168.1.2"``, 192.168.1.2 is blocked, but 193.168.1.2 is not. 475 476 :class:`DefaultCookiePolicy` implements the following additional methods: 477 478 479 .. method:: DefaultCookiePolicy.blocked_domains() 480 481 Return the sequence of blocked domains (as a tuple). 482 483 484 .. method:: DefaultCookiePolicy.set_blocked_domains(blocked_domains) 485 486 Set the sequence of blocked domains. 487 488 489 .. method:: DefaultCookiePolicy.is_blocked(domain) 490 491 Return whether *domain* is on the blacklist for setting or receiving cookies. 492 493 494 .. method:: DefaultCookiePolicy.allowed_domains() 495 496 Return :const:`None`, or the sequence of allowed domains (as a tuple). 497 498 499 .. method:: DefaultCookiePolicy.set_allowed_domains(allowed_domains) 500 501 Set the sequence of allowed domains, or :const:`None`. 502 503 504 .. method:: DefaultCookiePolicy.is_not_allowed(domain) 505 506 Return whether *domain* is not on the whitelist for setting or receiving 507 cookies. 508 509 :class:`DefaultCookiePolicy` instances have the following attributes, which are 510 all initialised from the constructor arguments of the same name, and which may 511 all be assigned to. 512 513 514 .. attribute:: DefaultCookiePolicy.rfc2109_as_netscape 515 516 If true, request that the :class:`CookieJar` instance downgrade RFC 2109 cookies 517 (ie. cookies received in a :mailheader:`Set-Cookie` header with a version 518 cookie-attribute of 1) to Netscape cookies by setting the version attribute of 519 the :class:`~cookielib.Cookie` instance to 0. The default value is :const:`None`, in which 520 case RFC 2109 cookies are downgraded if and only if RFC 2965 handling is turned 521 off. Therefore, RFC 2109 cookies are downgraded by default. 522 523 .. versionadded:: 2.5 524 525 General strictness switches: 526 527 528 .. attribute:: DefaultCookiePolicy.strict_domain 529 530 Don't allow sites to set two-component domains with country-code top-level 531 domains like ``.co.uk``, ``.gov.uk``, ``.co.nz``.etc. This is far from perfect 532 and isn't guaranteed to work! 533 534 RFC 2965 protocol strictness switches: 535 536 537 .. attribute:: DefaultCookiePolicy.strict_rfc2965_unverifiable 538 539 Follow RFC 2965 rules on unverifiable transactions (usually, an unverifiable 540 transaction is one resulting from a redirect or a request for an image hosted on 541 another site). If this is false, cookies are *never* blocked on the basis of 542 verifiability 543 544 Netscape protocol strictness switches: 545 546 547 .. attribute:: DefaultCookiePolicy.strict_ns_unverifiable 548 549 Apply RFC 2965 rules on unverifiable transactions even to Netscape cookies. 550 551 552 .. attribute:: DefaultCookiePolicy.strict_ns_domain 553 554 Flags indicating how strict to be with domain-matching rules for Netscape 555 cookies. See below for acceptable values. 556 557 558 .. attribute:: DefaultCookiePolicy.strict_ns_set_initial_dollar 559 560 Ignore cookies in Set-Cookie: headers that have names starting with ``'$'``. 561 562 563 .. attribute:: DefaultCookiePolicy.strict_ns_set_path 564 565 Don't allow setting cookies whose path doesn't path-match request URI. 566 567 :attr:`strict_ns_domain` is a collection of flags. Its value is constructed by 568 or-ing together (for example, ``DomainStrictNoDots|DomainStrictNonDomain`` means 569 both flags are set). 570 571 572 .. attribute:: DefaultCookiePolicy.DomainStrictNoDots 573 574 When setting cookies, the 'host prefix' must not contain a dot (eg. 575 ``www.foo.bar.com`` can't set a cookie for ``.bar.com``, because ``www.foo`` 576 contains a dot). 577 578 579 .. attribute:: DefaultCookiePolicy.DomainStrictNonDomain 580 581 Cookies that did not explicitly specify a ``domain`` cookie-attribute can only 582 be returned to a domain equal to the domain that set the cookie (eg. 583 ``spam.example.com`` won't be returned cookies from ``example.com`` that had no 584 ``domain`` cookie-attribute). 585 586 587 .. attribute:: DefaultCookiePolicy.DomainRFC2965Match 588 589 When setting cookies, require a full RFC 2965 domain-match. 590 591 The following attributes are provided for convenience, and are the most useful 592 combinations of the above flags: 593 594 595 .. attribute:: DefaultCookiePolicy.DomainLiberal 596 597 Equivalent to 0 (ie. all of the above Netscape domain strictness flags switched 598 off). 599 600 601 .. attribute:: DefaultCookiePolicy.DomainStrict 602 603 Equivalent to ``DomainStrictNoDots|DomainStrictNonDomain``. 604 605 606 .. _cookielib-cookie-objects: 607 608 Cookie Objects 609 -------------- 610 611 :class:`~cookielib.Cookie` instances have Python attributes roughly corresponding to the 612 standard cookie-attributes specified in the various cookie standards. The 613 correspondence is not one-to-one, because there are complicated rules for 614 assigning default values, because the ``max-age`` and ``expires`` 615 cookie-attributes contain equivalent information, and because RFC 2109 cookies 616 may be 'downgraded' by :mod:`cookielib` from version 1 to version 0 (Netscape) 617 cookies. 618 619 Assignment to these attributes should not be necessary other than in rare 620 circumstances in a :class:`CookiePolicy` method. The class does not enforce 621 internal consistency, so you should know what you're doing if you do that. 622 623 624 .. attribute:: Cookie.version 625 626 Integer or :const:`None`. Netscape cookies have :attr:`version` 0. RFC 2965 and 627 RFC 2109 cookies have a ``version`` cookie-attribute of 1. However, note that 628 :mod:`cookielib` may 'downgrade' RFC 2109 cookies to Netscape cookies, in which 629 case :attr:`version` is 0. 630 631 632 .. attribute:: Cookie.name 633 634 Cookie name (a string). 635 636 637 .. attribute:: Cookie.value 638 639 Cookie value (a string), or :const:`None`. 640 641 642 .. attribute:: Cookie.port 643 644 String representing a port or a set of ports (eg. '80', or '80,8080'), or 645 :const:`None`. 646 647 648 .. attribute:: Cookie.path 649 650 Cookie path (a string, eg. ``'/acme/rocket_launchers'``). 651 652 653 .. attribute:: Cookie.secure 654 655 ``True`` if cookie should only be returned over a secure connection. 656 657 658 .. attribute:: Cookie.expires 659 660 Integer expiry date in seconds since epoch, or :const:`None`. See also the 661 :meth:`is_expired` method. 662 663 664 .. attribute:: Cookie.discard 665 666 ``True`` if this is a session cookie. 667 668 669 .. attribute:: Cookie.comment 670 671 String comment from the server explaining the function of this cookie, or 672 :const:`None`. 673 674 675 .. attribute:: Cookie.comment_url 676 677 URL linking to a comment from the server explaining the function of this cookie, 678 or :const:`None`. 679 680 681 .. attribute:: Cookie.rfc2109 682 683 ``True`` if this cookie was received as an RFC 2109 cookie (ie. the cookie 684 arrived in a :mailheader:`Set-Cookie` header, and the value of the Version 685 cookie-attribute in that header was 1). This attribute is provided because 686 :mod:`cookielib` may 'downgrade' RFC 2109 cookies to Netscape cookies, in 687 which case :attr:`version` is 0. 688 689 .. versionadded:: 2.5 690 691 692 .. attribute:: Cookie.port_specified 693 694 ``True`` if a port or set of ports was explicitly specified by the server (in the 695 :mailheader:`Set-Cookie` / :mailheader:`Set-Cookie2` header). 696 697 698 .. attribute:: Cookie.domain_specified 699 700 ``True`` if a domain was explicitly specified by the server. 701 702 703 .. attribute:: Cookie.domain_initial_dot 704 705 ``True`` if the domain explicitly specified by the server began with a dot 706 (``'.'``). 707 708 Cookies may have additional non-standard cookie-attributes. These may be 709 accessed using the following methods: 710 711 712 .. method:: Cookie.has_nonstandard_attr(name) 713 714 Return true if cookie has the named cookie-attribute. 715 716 717 .. method:: Cookie.get_nonstandard_attr(name, default=None) 718 719 If cookie has the named cookie-attribute, return its value. Otherwise, return 720 *default*. 721 722 723 .. method:: Cookie.set_nonstandard_attr(name, value) 724 725 Set the value of the named cookie-attribute. 726 727 The :class:`~cookielib.Cookie` class also defines the following method: 728 729 730 .. method:: Cookie.is_expired([now=None]) 731 732 ``True`` if cookie has passed the time at which the server requested it should 733 expire. If *now* is given (in seconds since the epoch), return whether the 734 cookie has expired at the specified time. 735 736 737 .. _cookielib-examples: 738 739 Examples 740 -------- 741 742 The first example shows the most common usage of :mod:`cookielib`:: 743 744 import cookielib, urllib2 745 cj = cookielib.CookieJar() 746 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 747 r = opener.open("http://example.com/") 748 749 This example illustrates how to open a URL using your Netscape, Mozilla, or Lynx 750 cookies (assumes Unix/Netscape convention for location of the cookies file):: 751 752 import os, cookielib, urllib2 753 cj = cookielib.MozillaCookieJar() 754 cj.load(os.path.join(os.path.expanduser("~"), ".netscape", "cookies.txt")) 755 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 756 r = opener.open("http://example.com/") 757 758 The next example illustrates the use of :class:`DefaultCookiePolicy`. Turn on 759 RFC 2965 cookies, be more strict about domains when setting and returning 760 Netscape cookies, and block some domains from setting cookies or having them 761 returned:: 762 763 import urllib2 764 from cookielib import CookieJar, DefaultCookiePolicy 765 policy = DefaultCookiePolicy( 766 rfc2965=True, strict_ns_domain=DefaultCookiePolicy.DomainStrict, 767 blocked_domains=["ads.net", ".ads.net"]) 768 cj = CookieJar(policy) 769 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 770 r = opener.open("http://example.com/") 771 772