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