gooderp18绿色标准版
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

1091 lines
117KB

  1. <!DOCTYPE html>
  2. <html lang="en" data-content_root="../">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <meta property="og:title" content="http.cookiejar — Cookie handling for HTTP clients" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/library/http.cookiejar.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:description" content="Source code: Lib/http/cookiejar.py The http.cookiejar module defines classes for automatic handling of HTTP cookies. It is useful for accessing web sites that require small pieces of data – cookies..." />
  11. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  12. <meta property="og:image:alt" content="Python documentation" />
  13. <meta name="description" content="Source code: Lib/http/cookiejar.py The http.cookiejar module defines classes for automatic handling of HTTP cookies. It is useful for accessing web sites that require small pieces of data – cookies..." />
  14. <meta property="og:image:width" content="200" />
  15. <meta property="og:image:height" content="200" />
  16. <meta name="theme-color" content="#3776ab" />
  17. <title>http.cookiejar — Cookie handling for HTTP clients &#8212; Python 3.12.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
  19. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=bb723527" />
  20. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=b20cc3f5" />
  21. <script src="../_static/documentation_options.js?v=2c828074"></script>
  22. <script src="../_static/doctools.js?v=888ff710"></script>
  23. <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
  24. <script src="../_static/sidebar.js"></script>
  25. <link rel="search" type="application/opensearchdescription+xml"
  26. title="Search within Python 3.12.3 documentation"
  27. href="../_static/opensearch.xml"/>
  28. <link rel="author" title="About these documents" href="../about.html" />
  29. <link rel="index" title="Index" href="../genindex.html" />
  30. <link rel="search" title="Search" href="../search.html" />
  31. <link rel="copyright" title="Copyright" href="../copyright.html" />
  32. <link rel="next" title="xmlrpc — XMLRPC server and client modules" href="xmlrpc.html" />
  33. <link rel="prev" title="http.cookies — HTTP state management" href="http.cookies.html" />
  34. <link rel="canonical" href="https://docs.python.org/3/library/http.cookiejar.html" />
  35. <style>
  36. @media only screen {
  37. table.full-width-table {
  38. width: 100%;
  39. }
  40. }
  41. </style>
  42. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  43. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  44. <script type="text/javascript" src="../_static/copybutton.js"></script>
  45. <script type="text/javascript" src="../_static/menu.js"></script>
  46. <script type="text/javascript" src="../_static/search-focus.js"></script>
  47. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  48. </head>
  49. <body>
  50. <div class="mobile-nav">
  51. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  52. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  53. <nav class="nav-content" role="navigation">
  54. <label for="menuToggler" class="toggler__label">
  55. <span></span>
  56. </label>
  57. <span class="nav-items-wrapper">
  58. <a href="https://www.python.org/" class="nav-logo">
  59. <img src="../_static/py.svg" alt="Python logo"/>
  60. </a>
  61. <span class="version_switcher_placeholder"></span>
  62. <form role="search" class="search" action="../search.html" method="get">
  63. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  64. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  65. </svg>
  66. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  67. <input type="submit" value="Go"/>
  68. </form>
  69. </span>
  70. </nav>
  71. <div class="menu-wrapper">
  72. <nav class="menu" role="navigation" aria-label="main navigation">
  73. <div class="language_switcher_placeholder"></div>
  74. <label class="theme-selector-label">
  75. Theme
  76. <select class="theme-selector" oninput="activateTheme(this.value)">
  77. <option value="auto" selected>Auto</option>
  78. <option value="light">Light</option>
  79. <option value="dark">Dark</option>
  80. </select>
  81. </label>
  82. <div>
  83. <h3><a href="../contents.html">Table of Contents</a></h3>
  84. <ul>
  85. <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> — Cookie handling for HTTP clients</a><ul>
  86. <li><a class="reference internal" href="#cookiejar-and-filecookiejar-objects">CookieJar and FileCookieJar Objects</a></li>
  87. <li><a class="reference internal" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers">FileCookieJar subclasses and co-operation with web browsers</a></li>
  88. <li><a class="reference internal" href="#cookiepolicy-objects">CookiePolicy Objects</a></li>
  89. <li><a class="reference internal" href="#defaultcookiepolicy-objects">DefaultCookiePolicy Objects</a></li>
  90. <li><a class="reference internal" href="#cookie-objects">Cookie Objects</a></li>
  91. <li><a class="reference internal" href="#examples">Examples</a></li>
  92. </ul>
  93. </li>
  94. </ul>
  95. </div>
  96. <div>
  97. <h4>Previous topic</h4>
  98. <p class="topless"><a href="http.cookies.html"
  99. title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> — HTTP state management</a></p>
  100. </div>
  101. <div>
  102. <h4>Next topic</h4>
  103. <p class="topless"><a href="xmlrpc.html"
  104. title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc</span></code> — XMLRPC server and client modules</a></p>
  105. </div>
  106. <div role="note" aria-label="source link">
  107. <h3>This Page</h3>
  108. <ul class="this-page-menu">
  109. <li><a href="../bugs.html">Report a Bug</a></li>
  110. <li>
  111. <a href="https://github.com/python/cpython/blob/main/Doc/library/http.cookiejar.rst"
  112. rel="nofollow">Show Source
  113. </a>
  114. </li>
  115. </ul>
  116. </div>
  117. </nav>
  118. </div>
  119. </div>
  120. <div class="related" role="navigation" aria-label="related navigation">
  121. <h3>Navigation</h3>
  122. <ul>
  123. <li class="right" style="margin-right: 10px">
  124. <a href="../genindex.html" title="General Index"
  125. accesskey="I">index</a></li>
  126. <li class="right" >
  127. <a href="../py-modindex.html" title="Python Module Index"
  128. >modules</a> |</li>
  129. <li class="right" >
  130. <a href="xmlrpc.html" title="xmlrpc — XMLRPC server and client modules"
  131. accesskey="N">next</a> |</li>
  132. <li class="right" >
  133. <a href="http.cookies.html" title="http.cookies — HTTP state management"
  134. accesskey="P">previous</a> |</li>
  135. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  136. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  137. <li class="switchers">
  138. <div class="language_switcher_placeholder"></div>
  139. <div class="version_switcher_placeholder"></div>
  140. </li>
  141. <li>
  142. </li>
  143. <li id="cpython-language-and-version">
  144. <a href="../index.html">3.12.3 Documentation</a> &#187;
  145. </li>
  146. <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
  147. <li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">Internet Protocols and Support</a> &#187;</li>
  148. <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> — Cookie handling for HTTP clients</a></li>
  149. <li class="right">
  150. <div class="inline-search" role="search">
  151. <form class="inline-search" action="../search.html" method="get">
  152. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  153. <input type="submit" value="Go" />
  154. </form>
  155. </div>
  156. |
  157. </li>
  158. <li class="right">
  159. <label class="theme-selector-label">
  160. Theme
  161. <select class="theme-selector" oninput="activateTheme(this.value)">
  162. <option value="auto" selected>Auto</option>
  163. <option value="light">Light</option>
  164. <option value="dark">Dark</option>
  165. </select>
  166. </label> |</li>
  167. </ul>
  168. </div>
  169. <div class="document">
  170. <div class="documentwrapper">
  171. <div class="bodywrapper">
  172. <div class="body" role="main">
  173. <section id="module-http.cookiejar">
  174. <span id="http-cookiejar-cookie-handling-for-http-clients"></span><h1><a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> — Cookie handling for HTTP clients<a class="headerlink" href="#module-http.cookiejar" title="Link to this heading">¶</a></h1>
  175. <p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.12/Lib/http/cookiejar.py">Lib/http/cookiejar.py</a></p>
  176. <hr class="docutils" />
  177. <p>The <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> module defines classes for automatic handling of HTTP
  178. cookies. It is useful for accessing web sites that require small pieces of data
  179. – <em class="dfn">cookies</em> – to be set on the client machine by an HTTP response from a
  180. web server, and then returned to the server in later HTTP requests.</p>
  181. <p>Both the regular Netscape cookie protocol and the protocol defined by
  182. <span class="target" id="index-0"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> are handled. RFC 2965 handling is switched off by default.
  183. <span class="target" id="index-1"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies are parsed as Netscape cookies and subsequently treated
  184. either as Netscape or RFC 2965 cookies according to the ‘policy’ in effect.
  185. Note that the great majority of cookies on the internet are Netscape cookies.
  186. <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> attempts to follow the de-facto Netscape cookie protocol (which
  187. differs substantially from that set out in the original Netscape specification),
  188. including taking note of the <code class="docutils literal notranslate"><span class="pre">max-age</span></code> and <code class="docutils literal notranslate"><span class="pre">port</span></code> cookie-attributes
  189. introduced with RFC 2965.</p>
  190. <div class="admonition note">
  191. <p class="admonition-title">Note</p>
  192. <p>The various named parameters found in <em class="mailheader">Set-Cookie</em> and
  193. <em class="mailheader">Set-Cookie2</em> headers (eg. <code class="docutils literal notranslate"><span class="pre">domain</span></code> and <code class="docutils literal notranslate"><span class="pre">expires</span></code>) are
  194. conventionally referred to as <em class="dfn">attributes</em>. To distinguish them from
  195. Python attributes, the documentation for this module uses the term
  196. <em class="dfn">cookie-attribute</em> instead.</p>
  197. </div>
  198. <p>The module defines the following exception:</p>
  199. <dl class="py exception">
  200. <dt class="sig sig-object py" id="http.cookiejar.LoadError">
  201. <em class="property"><span class="pre">exception</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">LoadError</span></span><a class="headerlink" href="#http.cookiejar.LoadError" title="Link to this definition">¶</a></dt>
  202. <dd><p>Instances of <a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> raise this exception on failure to load
  203. cookies from a file. <a class="reference internal" href="#http.cookiejar.LoadError" title="http.cookiejar.LoadError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">LoadError</span></code></a> is a subclass of <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a>.</p>
  204. <div class="versionchanged">
  205. <p><span class="versionmodified changed">Changed in version 3.3: </span><a class="reference internal" href="#http.cookiejar.LoadError" title="http.cookiejar.LoadError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">LoadError</span></code></a> used to be a subtype of <a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IOError</span></code></a>, which is now an
  206. alias of <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a>.</p>
  207. </div>
  208. </dd></dl>
  209. <p>The following classes are provided:</p>
  210. <dl class="py class">
  211. <dt class="sig sig-object py" id="http.cookiejar.CookieJar">
  212. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">CookieJar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar" title="Link to this definition">¶</a></dt>
  213. <dd><p><em>policy</em> is an object implementing the <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> interface.</p>
  214. <p>The <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> class stores HTTP cookies. It extracts cookies from HTTP
  215. requests, and returns them in HTTP responses. <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> instances
  216. automatically expire contained cookies when necessary. Subclasses are also
  217. responsible for storing and retrieving cookies from a file or database.</p>
  218. </dd></dl>
  219. <dl class="py class">
  220. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar">
  221. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">FileCookieJar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delayload</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar" title="Link to this definition">¶</a></dt>
  222. <dd><p><em>policy</em> is an object implementing the <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> interface. For the
  223. other arguments, see the documentation for the corresponding attributes.</p>
  224. <p>A <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> which can load cookies from, and perhaps save cookies to, a
  225. file on disk. Cookies are <strong>NOT</strong> loaded from the named file until either the
  226. <a class="reference internal" href="#http.cookiejar.FileCookieJar.load" title="http.cookiejar.FileCookieJar.load"><code class="xref py py-meth docutils literal notranslate"><span class="pre">load()</span></code></a> or <a class="reference internal" href="#http.cookiejar.FileCookieJar.revert" title="http.cookiejar.FileCookieJar.revert"><code class="xref py py-meth docutils literal notranslate"><span class="pre">revert()</span></code></a> method is called. Subclasses of this class are
  227. documented in section <a class="reference internal" href="#file-cookie-jar-classes"><span class="std std-ref">FileCookieJar subclasses and co-operation with web browsers</span></a>.</p>
  228. <p>This should not be initialized directly – use its subclasses below instead.</p>
  229. <div class="versionchanged">
  230. <p><span class="versionmodified changed">Changed in version 3.8: </span>The filename parameter supports a <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>.</p>
  231. </div>
  232. </dd></dl>
  233. <dl class="py class">
  234. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy">
  235. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">CookiePolicy</span></span><a class="headerlink" href="#http.cookiejar.CookiePolicy" title="Link to this definition">¶</a></dt>
  236. <dd><p>This class is responsible for deciding whether each cookie should be accepted
  237. from / returned to the server.</p>
  238. </dd></dl>
  239. <dl class="py class">
  240. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy">
  241. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">DefaultCookiePolicy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blocked_domains</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allowed_domains</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">netscape</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rfc2965</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rfc2109_as_netscape</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">hide_cookie2</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_domain</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_rfc2965_unverifiable</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_ns_unverifiable</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_ns_domain</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">DefaultCookiePolicy.DomainLiberal</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_ns_set_initial_dollar</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict_ns_set_path</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">secure_protocols</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('https',</span> <span class="pre">'wss')</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy" title="Link to this definition">¶</a></dt>
  242. <dd><p>Constructor arguments should be passed as keyword arguments only.
  243. <em>blocked_domains</em> is a sequence of domain names that we never accept cookies
  244. from, nor return cookies to. <em>allowed_domains</em> if not <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>, this is a
  245. sequence of the only domains for which we accept and return cookies.
  246. <em>secure_protocols</em> is a sequence of protocols for which secure cookies can be
  247. added to. By default <em>https</em> and <em>wss</em> (secure websocket) are considered
  248. secure protocols. For all other arguments, see the documentation for
  249. <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> and <a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> objects.</p>
  250. <p><a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> implements the standard accept / reject rules for
  251. Netscape and <span class="target" id="index-2"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies. By default, <span class="target" id="index-3"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies (ie. cookies
  252. received in a <em class="mailheader">Set-Cookie</em> header with a version cookie-attribute of
  253. 1) are treated according to the RFC 2965 rules. However, if RFC 2965 handling
  254. is turned off or <a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape" title="http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape"><code class="xref py py-attr docutils literal notranslate"><span class="pre">rfc2109_as_netscape</span></code></a> is <code class="docutils literal notranslate"><span class="pre">True</span></code>, RFC 2109 cookies are
  255. ‘downgraded’ by the <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> instance to Netscape cookies, by
  256. setting the <code class="xref py py-attr docutils literal notranslate"><span class="pre">version</span></code> attribute of the <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> instance to 0.
  257. <a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> also provides some parameters to allow some
  258. fine-tuning of policy.</p>
  259. </dd></dl>
  260. <dl class="py class">
  261. <dt class="sig sig-object py" id="http.cookiejar.Cookie">
  262. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">Cookie</span></span><a class="headerlink" href="#http.cookiejar.Cookie" title="Link to this definition">¶</a></dt>
  263. <dd><p>This class represents Netscape, <span class="target" id="index-4"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> and <span class="target" id="index-5"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies. It is not
  264. expected that users of <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> construct their own <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a>
  265. instances. Instead, if necessary, call <code class="xref py py-meth docutils literal notranslate"><span class="pre">make_cookies()</span></code> on a
  266. <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> instance.</p>
  267. </dd></dl>
  268. <div class="admonition seealso">
  269. <p class="admonition-title">See also</p>
  270. <dl class="simple">
  271. <dt>Module <a class="reference internal" href="urllib.request.html#module-urllib.request" title="urllib.request: Extensible library for opening URLs."><code class="xref py py-mod docutils literal notranslate"><span class="pre">urllib.request</span></code></a></dt><dd><p>URL opening with automatic cookie handling.</p>
  272. </dd>
  273. <dt>Module <a class="reference internal" href="http.cookies.html#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a></dt><dd><p>HTTP cookie classes, principally useful for server-side code. The
  274. <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> and <a class="reference internal" href="http.cookies.html#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code></a> modules do not depend on each
  275. other.</p>
  276. </dd>
  277. <dt><a class="reference external" href="https://curl.se/rfc/cookie_spec.html">https://curl.se/rfc/cookie_spec.html</a></dt><dd><p>The specification of the original Netscape cookie protocol. Though this is
  278. still the dominant protocol, the ‘Netscape cookie protocol’ implemented by all
  279. the major browsers (and <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a>) only bears a passing resemblance to
  280. the one sketched out in <code class="docutils literal notranslate"><span class="pre">cookie_spec.html</span></code>.</p>
  281. </dd>
  282. <dt><span class="target" id="index-6"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> - HTTP State Management Mechanism</dt><dd><p>Obsoleted by <span class="target" id="index-7"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a>. Uses <em class="mailheader">Set-Cookie</em> with version=1.</p>
  283. </dd>
  284. <dt><span class="target" id="index-8"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> - HTTP State Management Mechanism</dt><dd><p>The Netscape protocol with the bugs fixed. Uses <em class="mailheader">Set-Cookie2</em> in
  285. place of <em class="mailheader">Set-Cookie</em>. Not widely used.</p>
  286. </dd>
  287. <dt><a class="reference external" href="http://kristol.org/cookie/errata.html">http://kristol.org/cookie/errata.html</a></dt><dd><p>Unfinished errata to <span class="target" id="index-9"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a>.</p>
  288. </dd>
  289. </dl>
  290. <p><span class="target" id="index-10"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2964.html"><strong>RFC 2964</strong></a> - Use of HTTP State Management</p>
  291. </div>
  292. <section id="cookiejar-and-filecookiejar-objects">
  293. <span id="cookie-jar-objects"></span><h2>CookieJar and FileCookieJar Objects<a class="headerlink" href="#cookiejar-and-filecookiejar-objects" title="Link to this heading">¶</a></h2>
  294. <p><a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> objects support the <a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></a> protocol for iterating over
  295. contained <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> objects.</p>
  296. <p><a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> has the following methods:</p>
  297. <dl class="py method">
  298. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.add_cookie_header">
  299. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">add_cookie_header</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.add_cookie_header" title="Link to this definition">¶</a></dt>
  300. <dd><p>Add correct <em class="mailheader">Cookie</em> header to <em>request</em>.</p>
  301. <p>If policy allows (ie. the <code class="xref py py-attr docutils literal notranslate"><span class="pre">rfc2965</span></code> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">hide_cookie2</span></code> attributes of
  302. the <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a>’s <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> instance are true and false
  303. respectively), the <em class="mailheader">Cookie2</em> header is also added when appropriate.</p>
  304. <p>The <em>request</em> object (usually a <a class="reference internal" href="urllib.request.html#urllib.request.Request" title="urllib.request.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">urllib.request.Request</span></code></a> instance)
  305. must support the methods <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_full_url()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">has_header()</span></code>,
  306. <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_header()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">header_items()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">add_unredirected_header()</span></code>
  307. and the attributes <code class="xref py py-attr docutils literal notranslate"><span class="pre">host</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">type</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">unverifiable</span></code>
  308. and <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> as documented by <a class="reference internal" href="urllib.request.html#module-urllib.request" title="urllib.request: Extensible library for opening URLs."><code class="xref py py-mod docutils literal notranslate"><span class="pre">urllib.request</span></code></a>.</p>
  309. <div class="versionchanged">
  310. <p><span class="versionmodified changed">Changed in version 3.3: </span><em>request</em> object needs <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> attribute. Dependency on a
  311. deprecated method <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_origin_req_host()</span></code> has been removed.</p>
  312. </div>
  313. </dd></dl>
  314. <dl class="py method">
  315. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.extract_cookies">
  316. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">extract_cookies</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">response</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.extract_cookies" title="Link to this definition">¶</a></dt>
  317. <dd><p>Extract cookies from HTTP <em>response</em> and store them in the <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a>,
  318. where allowed by policy.</p>
  319. <p>The <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> will look for allowable <em class="mailheader">Set-Cookie</em> and
  320. <em class="mailheader">Set-Cookie2</em> headers in the <em>response</em> argument, and store cookies
  321. as appropriate (subject to the <a class="reference internal" href="#http.cookiejar.CookiePolicy.set_ok" title="http.cookiejar.CookiePolicy.set_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CookiePolicy.set_ok()</span></code></a> method’s approval).</p>
  322. <p>The <em>response</em> object (usually the result of a call to
  323. <a class="reference internal" href="urllib.request.html#urllib.request.urlopen" title="urllib.request.urlopen"><code class="xref py py-meth docutils literal notranslate"><span class="pre">urllib.request.urlopen()</span></code></a>, or similar) should support an <code class="xref py py-meth docutils literal notranslate"><span class="pre">info()</span></code>
  324. method, which returns an <a class="reference internal" href="email.compat32-message.html#email.message.Message" title="email.message.Message"><code class="xref py py-class docutils literal notranslate"><span class="pre">email.message.Message</span></code></a> instance.</p>
  325. <p>The <em>request</em> object (usually a <a class="reference internal" href="urllib.request.html#urllib.request.Request" title="urllib.request.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">urllib.request.Request</span></code></a> instance)
  326. must support the method <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_full_url()</span></code> and the attributes
  327. <code class="xref py py-attr docutils literal notranslate"><span class="pre">host</span></code>, <code class="xref py py-attr docutils literal notranslate"><span class="pre">unverifiable</span></code> and <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code>,
  328. as documented by <a class="reference internal" href="urllib.request.html#module-urllib.request" title="urllib.request: Extensible library for opening URLs."><code class="xref py py-mod docutils literal notranslate"><span class="pre">urllib.request</span></code></a>. The request is used to set
  329. default values for cookie-attributes as well as for checking that the
  330. cookie is allowed to be set.</p>
  331. <div class="versionchanged">
  332. <p><span class="versionmodified changed">Changed in version 3.3: </span><em>request</em> object needs <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> attribute. Dependency on a
  333. deprecated method <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_origin_req_host()</span></code> has been removed.</p>
  334. </div>
  335. </dd></dl>
  336. <dl class="py method">
  337. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.set_policy">
  338. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">set_policy</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">policy</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_policy" title="Link to this definition">¶</a></dt>
  339. <dd><p>Set the <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> instance to be used.</p>
  340. </dd></dl>
  341. <dl class="py method">
  342. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.make_cookies">
  343. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">make_cookies</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">response</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.make_cookies" title="Link to this definition">¶</a></dt>
  344. <dd><p>Return sequence of <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> objects extracted from <em>response</em> object.</p>
  345. <p>See the documentation for <a class="reference internal" href="#http.cookiejar.CookieJar.extract_cookies" title="http.cookiejar.CookieJar.extract_cookies"><code class="xref py py-meth docutils literal notranslate"><span class="pre">extract_cookies()</span></code></a> for the interfaces required of
  346. the <em>response</em> and <em>request</em> arguments.</p>
  347. </dd></dl>
  348. <dl class="py method">
  349. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.set_cookie_if_ok">
  350. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">set_cookie_if_ok</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cookie</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_cookie_if_ok" title="Link to this definition">¶</a></dt>
  351. <dd><p>Set a <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> if policy says it’s OK to do so.</p>
  352. </dd></dl>
  353. <dl class="py method">
  354. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.set_cookie">
  355. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">set_cookie</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cookie</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_cookie" title="Link to this definition">¶</a></dt>
  356. <dd><p>Set a <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a>, without checking with policy to see whether or not it
  357. should be set.</p>
  358. </dd></dl>
  359. <dl class="py method">
  360. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.clear">
  361. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">clear</span></span><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param"><span class="n"><span class="pre">domain</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="optional">]</span><span class="optional">]</span><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.clear" title="Link to this definition">¶</a></dt>
  362. <dd><p>Clear some cookies.</p>
  363. <p>If invoked without arguments, clear all cookies. If given a single argument,
  364. only cookies belonging to that <em>domain</em> will be removed. If given two arguments,
  365. cookies belonging to the specified <em>domain</em> and URL <em>path</em> are removed. If
  366. given three arguments, then the cookie with the specified <em>domain</em>, <em>path</em> and
  367. <em>name</em> is removed.</p>
  368. <p>Raises <a class="reference internal" href="exceptions.html#KeyError" title="KeyError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">KeyError</span></code></a> if no matching cookie exists.</p>
  369. </dd></dl>
  370. <dl class="py method">
  371. <dt class="sig sig-object py" id="http.cookiejar.CookieJar.clear_session_cookies">
  372. <span class="sig-prename descclassname"><span class="pre">CookieJar.</span></span><span class="sig-name descname"><span class="pre">clear_session_cookies</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.clear_session_cookies" title="Link to this definition">¶</a></dt>
  373. <dd><p>Discard all session cookies.</p>
  374. <p>Discards all contained cookies that have a true <code class="xref py py-attr docutils literal notranslate"><span class="pre">discard</span></code> attribute
  375. (usually because they had either no <code class="docutils literal notranslate"><span class="pre">max-age</span></code> or <code class="docutils literal notranslate"><span class="pre">expires</span></code> cookie-attribute,
  376. or an explicit <code class="docutils literal notranslate"><span class="pre">discard</span></code> cookie-attribute). For interactive browsers, the end
  377. of a session usually corresponds to closing the browser window.</p>
  378. <p>Note that the <code class="xref py py-meth docutils literal notranslate"><span class="pre">save()</span></code> method won’t save session cookies anyway, unless you
  379. ask otherwise by passing a true <em>ignore_discard</em> argument.</p>
  380. </dd></dl>
  381. <p><a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> implements the following additional methods:</p>
  382. <dl class="py method">
  383. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar.save">
  384. <span class="sig-prename descclassname"><span class="pre">FileCookieJar.</span></span><span class="sig-name descname"><span class="pre">save</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_discard</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_expires</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.save" title="Link to this definition">¶</a></dt>
  385. <dd><p>Save cookies to a file.</p>
  386. <p>This base class raises <a class="reference internal" href="exceptions.html#NotImplementedError" title="NotImplementedError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">NotImplementedError</span></code></a>. Subclasses may leave this
  387. method unimplemented.</p>
  388. <p><em>filename</em> is the name of file in which to save cookies. If <em>filename</em> is not
  389. specified, <code class="xref py py-attr docutils literal notranslate"><span class="pre">self.filename</span></code> is used (whose default is the value passed to
  390. the constructor, if any); if <code class="xref py py-attr docutils literal notranslate"><span class="pre">self.filename</span></code> is <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>,
  391. <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised.</p>
  392. <p><em>ignore_discard</em>: save even cookies set to be discarded. <em>ignore_expires</em>: save
  393. even cookies that have expired</p>
  394. <p>The file is overwritten if it already exists, thus wiping all the cookies it
  395. contains. Saved cookies can be restored later using the <a class="reference internal" href="#http.cookiejar.FileCookieJar.load" title="http.cookiejar.FileCookieJar.load"><code class="xref py py-meth docutils literal notranslate"><span class="pre">load()</span></code></a> or
  396. <a class="reference internal" href="#http.cookiejar.FileCookieJar.revert" title="http.cookiejar.FileCookieJar.revert"><code class="xref py py-meth docutils literal notranslate"><span class="pre">revert()</span></code></a> methods.</p>
  397. </dd></dl>
  398. <dl class="py method">
  399. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar.load">
  400. <span class="sig-prename descclassname"><span class="pre">FileCookieJar.</span></span><span class="sig-name descname"><span class="pre">load</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_discard</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_expires</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.load" title="Link to this definition">¶</a></dt>
  401. <dd><p>Load cookies from a file.</p>
  402. <p>Old cookies are kept unless overwritten by newly loaded ones.</p>
  403. <p>Arguments are as for <a class="reference internal" href="#http.cookiejar.FileCookieJar.save" title="http.cookiejar.FileCookieJar.save"><code class="xref py py-meth docutils literal notranslate"><span class="pre">save()</span></code></a>.</p>
  404. <p>The named file must be in the format understood by the class, or
  405. <a class="reference internal" href="#http.cookiejar.LoadError" title="http.cookiejar.LoadError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">LoadError</span></code></a> will be raised. Also, <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a> may be raised, for
  406. example if the file does not exist.</p>
  407. <div class="versionchanged">
  408. <p><span class="versionmodified changed">Changed in version 3.3: </span><a class="reference internal" href="exceptions.html#IOError" title="IOError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">IOError</span></code></a> used to be raised, it is now an alias of <a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">OSError</span></code></a>.</p>
  409. </div>
  410. </dd></dl>
  411. <dl class="py method">
  412. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar.revert">
  413. <span class="sig-prename descclassname"><span class="pre">FileCookieJar.</span></span><span class="sig-name descname"><span class="pre">revert</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_discard</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_expires</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.revert" title="Link to this definition">¶</a></dt>
  414. <dd><p>Clear all cookies and reload cookies from a saved file.</p>
  415. <p><a class="reference internal" href="#http.cookiejar.FileCookieJar.revert" title="http.cookiejar.FileCookieJar.revert"><code class="xref py py-meth docutils literal notranslate"><span class="pre">revert()</span></code></a> can raise the same exceptions as <a class="reference internal" href="#http.cookiejar.FileCookieJar.load" title="http.cookiejar.FileCookieJar.load"><code class="xref py py-meth docutils literal notranslate"><span class="pre">load()</span></code></a>. If there is a
  416. failure, the object’s state will not be altered.</p>
  417. </dd></dl>
  418. <p><a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> instances have the following public attributes:</p>
  419. <dl class="py attribute">
  420. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar.filename">
  421. <span class="sig-prename descclassname"><span class="pre">FileCookieJar.</span></span><span class="sig-name descname"><span class="pre">filename</span></span><a class="headerlink" href="#http.cookiejar.FileCookieJar.filename" title="Link to this definition">¶</a></dt>
  422. <dd><p>Filename of default file in which to keep cookies. This attribute may be
  423. assigned to.</p>
  424. </dd></dl>
  425. <dl class="py attribute">
  426. <dt class="sig sig-object py" id="http.cookiejar.FileCookieJar.delayload">
  427. <span class="sig-prename descclassname"><span class="pre">FileCookieJar.</span></span><span class="sig-name descname"><span class="pre">delayload</span></span><a class="headerlink" href="#http.cookiejar.FileCookieJar.delayload" title="Link to this definition">¶</a></dt>
  428. <dd><p>If true, load cookies lazily from disk. This attribute should not be assigned
  429. to. This is only a hint, since this only affects performance, not behaviour
  430. (unless the cookies on disk are changing). A <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> object may
  431. ignore it. None of the <a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> classes included in the standard
  432. library lazily loads cookies.</p>
  433. </dd></dl>
  434. </section>
  435. <section id="filecookiejar-subclasses-and-co-operation-with-web-browsers">
  436. <span id="file-cookie-jar-classes"></span><h2>FileCookieJar subclasses and co-operation with web browsers<a class="headerlink" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers" title="Link to this heading">¶</a></h2>
  437. <p>The following <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> subclasses are provided for reading and
  438. writing.</p>
  439. <dl class="py class">
  440. <dt class="sig sig-object py" id="http.cookiejar.MozillaCookieJar">
  441. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">MozillaCookieJar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delayload</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.MozillaCookieJar" title="Link to this definition">¶</a></dt>
  442. <dd><p>A <a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> that can load from and save cookies to disk in the
  443. Mozilla <code class="docutils literal notranslate"><span class="pre">cookies.txt</span></code> file format (which is also used by curl and the Lynx
  444. and Netscape browsers).</p>
  445. <div class="admonition note">
  446. <p class="admonition-title">Note</p>
  447. <p>This loses information about <span class="target" id="index-11"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies, and also about newer or
  448. non-standard cookie-attributes such as <code class="docutils literal notranslate"><span class="pre">port</span></code>.</p>
  449. </div>
  450. <div class="admonition warning">
  451. <p class="admonition-title">Warning</p>
  452. <p>Back up your cookies before saving if you have cookies whose loss / corruption
  453. would be inconvenient (there are some subtleties which may lead to slight
  454. changes in the file over a load / save round-trip).</p>
  455. </div>
  456. <p>Also note that cookies saved while Mozilla is running will get clobbered by
  457. Mozilla.</p>
  458. </dd></dl>
  459. <dl class="py class">
  460. <dt class="sig sig-object py" id="http.cookiejar.LWPCookieJar">
  461. <em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">http.cookiejar.</span></span><span class="sig-name descname"><span class="pre">LWPCookieJar</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filename</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">delayload</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">policy</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.LWPCookieJar" title="Link to this definition">¶</a></dt>
  462. <dd><p>A <a class="reference internal" href="#http.cookiejar.FileCookieJar" title="http.cookiejar.FileCookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">FileCookieJar</span></code></a> that can load from and save cookies to disk in format
  463. compatible with the libwww-perl library’s <code class="docutils literal notranslate"><span class="pre">Set-Cookie3</span></code> file format. This is
  464. convenient if you want to store cookies in a human-readable file.</p>
  465. <div class="versionchanged">
  466. <p><span class="versionmodified changed">Changed in version 3.8: </span>The filename parameter supports a <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>.</p>
  467. </div>
  468. </dd></dl>
  469. </section>
  470. <section id="cookiepolicy-objects">
  471. <span id="cookie-policy-objects"></span><h2>CookiePolicy Objects<a class="headerlink" href="#cookiepolicy-objects" title="Link to this heading">¶</a></h2>
  472. <p>Objects implementing the <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> interface have the following
  473. methods:</p>
  474. <dl class="py method">
  475. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.set_ok">
  476. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">set_ok</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cookie</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.set_ok" title="Link to this definition">¶</a></dt>
  477. <dd><p>Return boolean value indicating whether cookie should be accepted from server.</p>
  478. <p><em>cookie</em> is a <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> instance. <em>request</em> is an object
  479. implementing the interface defined by the documentation for
  480. <a class="reference internal" href="#http.cookiejar.CookieJar.extract_cookies" title="http.cookiejar.CookieJar.extract_cookies"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CookieJar.extract_cookies()</span></code></a>.</p>
  481. </dd></dl>
  482. <dl class="py method">
  483. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.return_ok">
  484. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">return_ok</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cookie</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.return_ok" title="Link to this definition">¶</a></dt>
  485. <dd><p>Return boolean value indicating whether cookie should be returned to server.</p>
  486. <p><em>cookie</em> is a <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> instance. <em>request</em> is an object
  487. implementing the interface defined by the documentation for
  488. <a class="reference internal" href="#http.cookiejar.CookieJar.add_cookie_header" title="http.cookiejar.CookieJar.add_cookie_header"><code class="xref py py-meth docutils literal notranslate"><span class="pre">CookieJar.add_cookie_header()</span></code></a>.</p>
  489. </dd></dl>
  490. <dl class="py method">
  491. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.domain_return_ok">
  492. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">domain_return_ok</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domain</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="Link to this definition">¶</a></dt>
  493. <dd><p>Return <code class="docutils literal notranslate"><span class="pre">False</span></code> if cookies should not be returned, given cookie domain.</p>
  494. <p>This method is an optimization. It removes the need for checking every cookie
  495. with a particular domain (which might involve reading many files). Returning
  496. true from <a class="reference internal" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="http.cookiejar.CookiePolicy.domain_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">domain_return_ok()</span></code></a> and <a class="reference internal" href="#http.cookiejar.CookiePolicy.path_return_ok" title="http.cookiejar.CookiePolicy.path_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">path_return_ok()</span></code></a> leaves all the
  497. work to <a class="reference internal" href="#http.cookiejar.CookiePolicy.return_ok" title="http.cookiejar.CookiePolicy.return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">return_ok()</span></code></a>.</p>
  498. <p>If <a class="reference internal" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="http.cookiejar.CookiePolicy.domain_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">domain_return_ok()</span></code></a> returns true for the cookie domain,
  499. <a class="reference internal" href="#http.cookiejar.CookiePolicy.path_return_ok" title="http.cookiejar.CookiePolicy.path_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">path_return_ok()</span></code></a> is called for the cookie path. Otherwise,
  500. <a class="reference internal" href="#http.cookiejar.CookiePolicy.path_return_ok" title="http.cookiejar.CookiePolicy.path_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">path_return_ok()</span></code></a> and <a class="reference internal" href="#http.cookiejar.CookiePolicy.return_ok" title="http.cookiejar.CookiePolicy.return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">return_ok()</span></code></a> are never called for that cookie
  501. domain. If <a class="reference internal" href="#http.cookiejar.CookiePolicy.path_return_ok" title="http.cookiejar.CookiePolicy.path_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">path_return_ok()</span></code></a> returns true, <a class="reference internal" href="#http.cookiejar.CookiePolicy.return_ok" title="http.cookiejar.CookiePolicy.return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">return_ok()</span></code></a> is called
  502. with the <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> object itself for a full check. Otherwise,
  503. <a class="reference internal" href="#http.cookiejar.CookiePolicy.return_ok" title="http.cookiejar.CookiePolicy.return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">return_ok()</span></code></a> is never called for that cookie path.</p>
  504. <p>Note that <a class="reference internal" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="http.cookiejar.CookiePolicy.domain_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">domain_return_ok()</span></code></a> is called for every <em>cookie</em> domain, not just
  505. for the <em>request</em> domain. For example, the function might be called with both
  506. <code class="docutils literal notranslate"><span class="pre">&quot;.example.com&quot;</span></code> and <code class="docutils literal notranslate"><span class="pre">&quot;www.example.com&quot;</span></code> if the request domain is
  507. <code class="docutils literal notranslate"><span class="pre">&quot;www.example.com&quot;</span></code>. The same goes for <a class="reference internal" href="#http.cookiejar.CookiePolicy.path_return_ok" title="http.cookiejar.CookiePolicy.path_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">path_return_ok()</span></code></a>.</p>
  508. <p>The <em>request</em> argument is as documented for <a class="reference internal" href="#http.cookiejar.CookiePolicy.return_ok" title="http.cookiejar.CookiePolicy.return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">return_ok()</span></code></a>.</p>
  509. </dd></dl>
  510. <dl class="py method">
  511. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.path_return_ok">
  512. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">path_return_ok</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">request</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.path_return_ok" title="Link to this definition">¶</a></dt>
  513. <dd><p>Return <code class="docutils literal notranslate"><span class="pre">False</span></code> if cookies should not be returned, given cookie path.</p>
  514. <p>See the documentation for <a class="reference internal" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="http.cookiejar.CookiePolicy.domain_return_ok"><code class="xref py py-meth docutils literal notranslate"><span class="pre">domain_return_ok()</span></code></a>.</p>
  515. </dd></dl>
  516. <p>In addition to implementing the methods above, implementations of the
  517. <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> interface must also supply the following attributes,
  518. indicating which protocols should be used, and how. All of these attributes may
  519. be assigned to.</p>
  520. <dl class="py attribute">
  521. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.netscape">
  522. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">netscape</span></span><a class="headerlink" href="#http.cookiejar.CookiePolicy.netscape" title="Link to this definition">¶</a></dt>
  523. <dd><p>Implement Netscape protocol.</p>
  524. </dd></dl>
  525. <dl class="py attribute">
  526. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.rfc2965">
  527. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">rfc2965</span></span><a class="headerlink" href="#http.cookiejar.CookiePolicy.rfc2965" title="Link to this definition">¶</a></dt>
  528. <dd><p>Implement <span class="target" id="index-12"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> protocol.</p>
  529. </dd></dl>
  530. <dl class="py attribute">
  531. <dt class="sig sig-object py" id="http.cookiejar.CookiePolicy.hide_cookie2">
  532. <span class="sig-prename descclassname"><span class="pre">CookiePolicy.</span></span><span class="sig-name descname"><span class="pre">hide_cookie2</span></span><a class="headerlink" href="#http.cookiejar.CookiePolicy.hide_cookie2" title="Link to this definition">¶</a></dt>
  533. <dd><p>Don’t add <em class="mailheader">Cookie2</em> header to requests (the presence of this header
  534. indicates to the server that we understand <span class="target" id="index-13"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies).</p>
  535. </dd></dl>
  536. <p>The most useful way to define a <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> class is by subclassing
  537. from <a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> and overriding some or all of the methods
  538. above. <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> itself may be used as a ‘null policy’ to allow
  539. setting and receiving any and all cookies (this is unlikely to be useful).</p>
  540. </section>
  541. <section id="defaultcookiepolicy-objects">
  542. <span id="default-cookie-policy-objects"></span><h2>DefaultCookiePolicy Objects<a class="headerlink" href="#defaultcookiepolicy-objects" title="Link to this heading">¶</a></h2>
  543. <p>Implements the standard rules for accepting and returning cookies.</p>
  544. <p>Both <span class="target" id="index-14"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> and Netscape cookies are covered. RFC 2965 handling is switched
  545. off by default.</p>
  546. <p>The easiest way to provide your own policy is to override this class and call
  547. its methods in your overridden implementations before adding your own additional
  548. checks:</p>
  549. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">http.cookiejar</span>
  550. <span class="k">class</span> <span class="nc">MyCookiePolicy</span><span class="p">(</span><span class="n">http</span><span class="o">.</span><span class="n">cookiejar</span><span class="o">.</span><span class="n">DefaultCookiePolicy</span><span class="p">):</span>
  551. <span class="k">def</span> <span class="nf">set_ok</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cookie</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
  552. <span class="k">if</span> <span class="ow">not</span> <span class="n">http</span><span class="o">.</span><span class="n">cookiejar</span><span class="o">.</span><span class="n">DefaultCookiePolicy</span><span class="o">.</span><span class="n">set_ok</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cookie</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
  553. <span class="k">return</span> <span class="kc">False</span>
  554. <span class="k">if</span> <span class="n">i_dont_want_to_store_this_cookie</span><span class="p">(</span><span class="n">cookie</span><span class="p">):</span>
  555. <span class="k">return</span> <span class="kc">False</span>
  556. <span class="k">return</span> <span class="kc">True</span>
  557. </pre></div>
  558. </div>
  559. <p>In addition to the features required to implement the <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a>
  560. interface, this class allows you to block and allow domains from setting and
  561. receiving cookies. There are also some strictness switches that allow you to
  562. tighten up the rather loose Netscape protocol rules a little bit (at the cost of
  563. blocking some benign cookies).</p>
  564. <p>A domain blocklist and allowlist is provided (both off by default). Only domains
  565. not in the blocklist and present in the allowlist (if the allowlist is active)
  566. participate in cookie setting and returning. Use the <em>blocked_domains</em>
  567. constructor argument, and <code class="xref py py-meth docutils literal notranslate"><span class="pre">blocked_domains()</span></code> and
  568. <code class="xref py py-meth docutils literal notranslate"><span class="pre">set_blocked_domains()</span></code> methods (and the corresponding argument and methods
  569. for <em>allowed_domains</em>). If you set an allowlist, you can turn it off again by
  570. setting it to <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  571. <p>Domains in block or allow lists that do not start with a dot must equal the
  572. cookie domain to be matched. For example, <code class="docutils literal notranslate"><span class="pre">&quot;example.com&quot;</span></code> matches a blocklist
  573. entry of <code class="docutils literal notranslate"><span class="pre">&quot;example.com&quot;</span></code>, but <code class="docutils literal notranslate"><span class="pre">&quot;www.example.com&quot;</span></code> does not. Domains that do
  574. start with a dot are matched by more specific domains too. For example, both
  575. <code class="docutils literal notranslate"><span class="pre">&quot;www.example.com&quot;</span></code> and <code class="docutils literal notranslate"><span class="pre">&quot;www.coyote.example.com&quot;</span></code> match <code class="docutils literal notranslate"><span class="pre">&quot;.example.com&quot;</span></code>
  576. (but <code class="docutils literal notranslate"><span class="pre">&quot;example.com&quot;</span></code> itself does not). IP addresses are an exception, and
  577. must match exactly. For example, if blocked_domains contains <code class="docutils literal notranslate"><span class="pre">&quot;192.168.1.2&quot;</span></code>
  578. and <code class="docutils literal notranslate"><span class="pre">&quot;.168.1.2&quot;</span></code>, 192.168.1.2 is blocked, but 193.168.1.2 is not.</p>
  579. <p><a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> implements the following additional methods:</p>
  580. <dl class="py method">
  581. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.blocked_domains">
  582. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">blocked_domains</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.blocked_domains" title="Link to this definition">¶</a></dt>
  583. <dd><p>Return the sequence of blocked domains (as a tuple).</p>
  584. </dd></dl>
  585. <dl class="py method">
  586. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.set_blocked_domains">
  587. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">set_blocked_domains</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">blocked_domains</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.set_blocked_domains" title="Link to this definition">¶</a></dt>
  588. <dd><p>Set the sequence of blocked domains.</p>
  589. </dd></dl>
  590. <dl class="py method">
  591. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.is_blocked">
  592. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">is_blocked</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domain</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.is_blocked" title="Link to this definition">¶</a></dt>
  593. <dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>domain</em> is on the blocklist for setting or receiving
  594. cookies.</p>
  595. </dd></dl>
  596. <dl class="py method">
  597. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.allowed_domains">
  598. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">allowed_domains</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.allowed_domains" title="Link to this definition">¶</a></dt>
  599. <dd><p>Return <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>, or the sequence of allowed domains (as a tuple).</p>
  600. </dd></dl>
  601. <dl class="py method">
  602. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.set_allowed_domains">
  603. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">set_allowed_domains</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">allowed_domains</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.set_allowed_domains" title="Link to this definition">¶</a></dt>
  604. <dd><p>Set the sequence of allowed domains, or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  605. </dd></dl>
  606. <dl class="py method">
  607. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.is_not_allowed">
  608. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">is_not_allowed</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">domain</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.is_not_allowed" title="Link to this definition">¶</a></dt>
  609. <dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if <em>domain</em> is not on the allowlist for setting or receiving
  610. cookies.</p>
  611. </dd></dl>
  612. <p><a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a> instances have the following attributes, which are
  613. all initialised from the constructor arguments of the same name, and which may
  614. all be assigned to.</p>
  615. <dl class="py attribute">
  616. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape">
  617. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">rfc2109_as_netscape</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape" title="Link to this definition">¶</a></dt>
  618. <dd><p>If true, request that the <a class="reference internal" href="#http.cookiejar.CookieJar" title="http.cookiejar.CookieJar"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookieJar</span></code></a> instance downgrade <span class="target" id="index-15"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies
  619. (ie. cookies received in a <em class="mailheader">Set-Cookie</em> header with a version
  620. cookie-attribute of 1) to Netscape cookies by setting the version attribute of
  621. the <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> instance to 0. The default value is <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>, in which
  622. case RFC 2109 cookies are downgraded if and only if <span class="target" id="index-16"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> handling is turned
  623. off. Therefore, RFC 2109 cookies are downgraded by default.</p>
  624. </dd></dl>
  625. <p>General strictness switches:</p>
  626. <dl class="py attribute">
  627. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_domain">
  628. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_domain</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_domain" title="Link to this definition">¶</a></dt>
  629. <dd><p>Don’t allow sites to set two-component domains with country-code top-level
  630. domains like <code class="docutils literal notranslate"><span class="pre">.co.uk</span></code>, <code class="docutils literal notranslate"><span class="pre">.gov.uk</span></code>, <code class="docutils literal notranslate"><span class="pre">.co.nz</span></code>.etc. This is far from perfect
  631. and isn’t guaranteed to work!</p>
  632. </dd></dl>
  633. <p><span class="target" id="index-17"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> protocol strictness switches:</p>
  634. <dl class="py attribute">
  635. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_rfc2965_unverifiable">
  636. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_rfc2965_unverifiable</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_rfc2965_unverifiable" title="Link to this definition">¶</a></dt>
  637. <dd><p>Follow <span class="target" id="index-18"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> rules on unverifiable transactions (usually, an unverifiable
  638. transaction is one resulting from a redirect or a request for an image hosted on
  639. another site). If this is false, cookies are <em>never</em> blocked on the basis of
  640. verifiability</p>
  641. </dd></dl>
  642. <p>Netscape protocol strictness switches:</p>
  643. <dl class="py attribute">
  644. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_ns_unverifiable">
  645. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_ns_unverifiable</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_unverifiable" title="Link to this definition">¶</a></dt>
  646. <dd><p>Apply <span class="target" id="index-19"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> rules on unverifiable transactions even to Netscape cookies.</p>
  647. </dd></dl>
  648. <dl class="py attribute">
  649. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_ns_domain">
  650. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_ns_domain</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_domain" title="Link to this definition">¶</a></dt>
  651. <dd><p>Flags indicating how strict to be with domain-matching rules for Netscape
  652. cookies. See below for acceptable values.</p>
  653. </dd></dl>
  654. <dl class="py attribute">
  655. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_ns_set_initial_dollar">
  656. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_ns_set_initial_dollar</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_set_initial_dollar" title="Link to this definition">¶</a></dt>
  657. <dd><p>Ignore cookies in Set-Cookie: headers that have names starting with <code class="docutils literal notranslate"><span class="pre">'$'</span></code>.</p>
  658. </dd></dl>
  659. <dl class="py attribute">
  660. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.strict_ns_set_path">
  661. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">strict_ns_set_path</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_set_path" title="Link to this definition">¶</a></dt>
  662. <dd><p>Don’t allow setting cookies whose path doesn’t path-match request URI.</p>
  663. </dd></dl>
  664. <p><code class="xref py py-attr docutils literal notranslate"><span class="pre">strict_ns_domain</span></code> is a collection of flags. Its value is constructed by
  665. or-ing together (for example, <code class="docutils literal notranslate"><span class="pre">DomainStrictNoDots|DomainStrictNonDomain</span></code> means
  666. both flags are set).</p>
  667. <dl class="py attribute">
  668. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.DomainStrictNoDots">
  669. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">DomainStrictNoDots</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrictNoDots" title="Link to this definition">¶</a></dt>
  670. <dd><p>When setting cookies, the ‘host prefix’ must not contain a dot (eg.
  671. <code class="docutils literal notranslate"><span class="pre">www.foo.bar.com</span></code> can’t set a cookie for <code class="docutils literal notranslate"><span class="pre">.bar.com</span></code>, because <code class="docutils literal notranslate"><span class="pre">www.foo</span></code>
  672. contains a dot).</p>
  673. </dd></dl>
  674. <dl class="py attribute">
  675. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.DomainStrictNonDomain">
  676. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">DomainStrictNonDomain</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrictNonDomain" title="Link to this definition">¶</a></dt>
  677. <dd><p>Cookies that did not explicitly specify a <code class="docutils literal notranslate"><span class="pre">domain</span></code> cookie-attribute can only
  678. be returned to a domain equal to the domain that set the cookie (eg.
  679. <code class="docutils literal notranslate"><span class="pre">spam.example.com</span></code> won’t be returned cookies from <code class="docutils literal notranslate"><span class="pre">example.com</span></code> that had no
  680. <code class="docutils literal notranslate"><span class="pre">domain</span></code> cookie-attribute).</p>
  681. </dd></dl>
  682. <dl class="py attribute">
  683. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.DomainRFC2965Match">
  684. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">DomainRFC2965Match</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainRFC2965Match" title="Link to this definition">¶</a></dt>
  685. <dd><p>When setting cookies, require a full <span class="target" id="index-20"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> domain-match.</p>
  686. </dd></dl>
  687. <p>The following attributes are provided for convenience, and are the most useful
  688. combinations of the above flags:</p>
  689. <dl class="py attribute">
  690. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.DomainLiberal">
  691. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">DomainLiberal</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainLiberal" title="Link to this definition">¶</a></dt>
  692. <dd><p>Equivalent to 0 (ie. all of the above Netscape domain strictness flags switched
  693. off).</p>
  694. </dd></dl>
  695. <dl class="py attribute">
  696. <dt class="sig sig-object py" id="http.cookiejar.DefaultCookiePolicy.DomainStrict">
  697. <span class="sig-prename descclassname"><span class="pre">DefaultCookiePolicy.</span></span><span class="sig-name descname"><span class="pre">DomainStrict</span></span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrict" title="Link to this definition">¶</a></dt>
  698. <dd><p>Equivalent to <code class="docutils literal notranslate"><span class="pre">DomainStrictNoDots|DomainStrictNonDomain</span></code>.</p>
  699. </dd></dl>
  700. </section>
  701. <section id="cookie-objects">
  702. <h2>Cookie Objects<a class="headerlink" href="#cookie-objects" title="Link to this heading">¶</a></h2>
  703. <p><a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> instances have Python attributes roughly corresponding to the
  704. standard cookie-attributes specified in the various cookie standards. The
  705. correspondence is not one-to-one, because there are complicated rules for
  706. assigning default values, because the <code class="docutils literal notranslate"><span class="pre">max-age</span></code> and <code class="docutils literal notranslate"><span class="pre">expires</span></code>
  707. cookie-attributes contain equivalent information, and because <span class="target" id="index-21"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies
  708. may be ‘downgraded’ by <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> from version 1 to version 0 (Netscape)
  709. cookies.</p>
  710. <p>Assignment to these attributes should not be necessary other than in rare
  711. circumstances in a <a class="reference internal" href="#http.cookiejar.CookiePolicy" title="http.cookiejar.CookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">CookiePolicy</span></code></a> method. The class does not enforce
  712. internal consistency, so you should know what you’re doing if you do that.</p>
  713. <dl class="py attribute">
  714. <dt class="sig sig-object py" id="http.cookiejar.Cookie.version">
  715. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">version</span></span><a class="headerlink" href="#http.cookiejar.Cookie.version" title="Link to this definition">¶</a></dt>
  716. <dd><p>Integer or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>. Netscape cookies have <a class="reference internal" href="#http.cookiejar.Cookie.version" title="http.cookiejar.Cookie.version"><code class="xref py py-attr docutils literal notranslate"><span class="pre">version</span></code></a> 0. <span class="target" id="index-22"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> and
  717. <span class="target" id="index-23"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies have a <code class="docutils literal notranslate"><span class="pre">version</span></code> cookie-attribute of 1. However, note that
  718. <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> may ‘downgrade’ RFC 2109 cookies to Netscape cookies, in which
  719. case <a class="reference internal" href="#http.cookiejar.Cookie.version" title="http.cookiejar.Cookie.version"><code class="xref py py-attr docutils literal notranslate"><span class="pre">version</span></code></a> is 0.</p>
  720. </dd></dl>
  721. <dl class="py attribute">
  722. <dt class="sig sig-object py" id="http.cookiejar.Cookie.name">
  723. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">name</span></span><a class="headerlink" href="#http.cookiejar.Cookie.name" title="Link to this definition">¶</a></dt>
  724. <dd><p>Cookie name (a string).</p>
  725. </dd></dl>
  726. <dl class="py attribute">
  727. <dt class="sig sig-object py" id="http.cookiejar.Cookie.value">
  728. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">value</span></span><a class="headerlink" href="#http.cookiejar.Cookie.value" title="Link to this definition">¶</a></dt>
  729. <dd><p>Cookie value (a string), or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  730. </dd></dl>
  731. <dl class="py attribute">
  732. <dt class="sig sig-object py" id="http.cookiejar.Cookie.port">
  733. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">port</span></span><a class="headerlink" href="#http.cookiejar.Cookie.port" title="Link to this definition">¶</a></dt>
  734. <dd><p>String representing a port or a set of ports (eg. ‘80’, or ‘80,8080’), or
  735. <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  736. </dd></dl>
  737. <dl class="py attribute">
  738. <dt class="sig sig-object py" id="http.cookiejar.Cookie.domain">
  739. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">domain</span></span><a class="headerlink" href="#http.cookiejar.Cookie.domain" title="Link to this definition">¶</a></dt>
  740. <dd><p>Cookie domain (a string).</p>
  741. </dd></dl>
  742. <dl class="py attribute">
  743. <dt class="sig sig-object py" id="http.cookiejar.Cookie.path">
  744. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">path</span></span><a class="headerlink" href="#http.cookiejar.Cookie.path" title="Link to this definition">¶</a></dt>
  745. <dd><p>Cookie path (a string, eg. <code class="docutils literal notranslate"><span class="pre">'/acme/rocket_launchers'</span></code>).</p>
  746. </dd></dl>
  747. <dl class="py attribute">
  748. <dt class="sig sig-object py" id="http.cookiejar.Cookie.secure">
  749. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">secure</span></span><a class="headerlink" href="#http.cookiejar.Cookie.secure" title="Link to this definition">¶</a></dt>
  750. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if cookie should only be returned over a secure connection.</p>
  751. </dd></dl>
  752. <dl class="py attribute">
  753. <dt class="sig sig-object py" id="http.cookiejar.Cookie.expires">
  754. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">expires</span></span><a class="headerlink" href="#http.cookiejar.Cookie.expires" title="Link to this definition">¶</a></dt>
  755. <dd><p>Integer expiry date in seconds since epoch, or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>. See also the
  756. <a class="reference internal" href="#http.cookiejar.Cookie.is_expired" title="http.cookiejar.Cookie.is_expired"><code class="xref py py-meth docutils literal notranslate"><span class="pre">is_expired()</span></code></a> method.</p>
  757. </dd></dl>
  758. <dl class="py attribute">
  759. <dt class="sig sig-object py" id="http.cookiejar.Cookie.discard">
  760. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">discard</span></span><a class="headerlink" href="#http.cookiejar.Cookie.discard" title="Link to this definition">¶</a></dt>
  761. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if this is a session cookie.</p>
  762. </dd></dl>
  763. <dl class="py attribute">
  764. <dt class="sig sig-object py" id="http.cookiejar.Cookie.comment">
  765. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">comment</span></span><a class="headerlink" href="#http.cookiejar.Cookie.comment" title="Link to this definition">¶</a></dt>
  766. <dd><p>String comment from the server explaining the function of this cookie, or
  767. <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  768. </dd></dl>
  769. <dl class="py attribute">
  770. <dt class="sig sig-object py" id="http.cookiejar.Cookie.comment_url">
  771. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">comment_url</span></span><a class="headerlink" href="#http.cookiejar.Cookie.comment_url" title="Link to this definition">¶</a></dt>
  772. <dd><p>URL linking to a comment from the server explaining the function of this cookie,
  773. or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a>.</p>
  774. </dd></dl>
  775. <dl class="py attribute">
  776. <dt class="sig sig-object py" id="http.cookiejar.Cookie.rfc2109">
  777. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">rfc2109</span></span><a class="headerlink" href="#http.cookiejar.Cookie.rfc2109" title="Link to this definition">¶</a></dt>
  778. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if this cookie was received as an <span class="target" id="index-24"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie (ie. the cookie
  779. arrived in a <em class="mailheader">Set-Cookie</em> header, and the value of the Version
  780. cookie-attribute in that header was 1). This attribute is provided because
  781. <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a> may ‘downgrade’ RFC 2109 cookies to Netscape cookies, in
  782. which case <a class="reference internal" href="#http.cookiejar.Cookie.version" title="http.cookiejar.Cookie.version"><code class="xref py py-attr docutils literal notranslate"><span class="pre">version</span></code></a> is 0.</p>
  783. </dd></dl>
  784. <dl class="py attribute">
  785. <dt class="sig sig-object py" id="http.cookiejar.Cookie.port_specified">
  786. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">port_specified</span></span><a class="headerlink" href="#http.cookiejar.Cookie.port_specified" title="Link to this definition">¶</a></dt>
  787. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if a port or set of ports was explicitly specified by the server (in the
  788. <em class="mailheader">Set-Cookie</em> / <em class="mailheader">Set-Cookie2</em> header).</p>
  789. </dd></dl>
  790. <dl class="py attribute">
  791. <dt class="sig sig-object py" id="http.cookiejar.Cookie.domain_specified">
  792. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">domain_specified</span></span><a class="headerlink" href="#http.cookiejar.Cookie.domain_specified" title="Link to this definition">¶</a></dt>
  793. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if a domain was explicitly specified by the server.</p>
  794. </dd></dl>
  795. <dl class="py attribute">
  796. <dt class="sig sig-object py" id="http.cookiejar.Cookie.domain_initial_dot">
  797. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">domain_initial_dot</span></span><a class="headerlink" href="#http.cookiejar.Cookie.domain_initial_dot" title="Link to this definition">¶</a></dt>
  798. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if the domain explicitly specified by the server began with a dot
  799. (<code class="docutils literal notranslate"><span class="pre">'.'</span></code>).</p>
  800. </dd></dl>
  801. <p>Cookies may have additional non-standard cookie-attributes. These may be
  802. accessed using the following methods:</p>
  803. <dl class="py method">
  804. <dt class="sig sig-object py" id="http.cookiejar.Cookie.has_nonstandard_attr">
  805. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">has_nonstandard_attr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.has_nonstandard_attr" title="Link to this definition">¶</a></dt>
  806. <dd><p>Return <code class="docutils literal notranslate"><span class="pre">True</span></code> if cookie has the named cookie-attribute.</p>
  807. </dd></dl>
  808. <dl class="py method">
  809. <dt class="sig sig-object py" id="http.cookiejar.Cookie.get_nonstandard_attr">
  810. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">get_nonstandard_attr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.get_nonstandard_attr" title="Link to this definition">¶</a></dt>
  811. <dd><p>If cookie has the named cookie-attribute, return its value. Otherwise, return
  812. <em>default</em>.</p>
  813. </dd></dl>
  814. <dl class="py method">
  815. <dt class="sig sig-object py" id="http.cookiejar.Cookie.set_nonstandard_attr">
  816. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">set_nonstandard_attr</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.set_nonstandard_attr" title="Link to this definition">¶</a></dt>
  817. <dd><p>Set the value of the named cookie-attribute.</p>
  818. </dd></dl>
  819. <p>The <a class="reference internal" href="#http.cookiejar.Cookie" title="http.cookiejar.Cookie"><code class="xref py py-class docutils literal notranslate"><span class="pre">Cookie</span></code></a> class also defines the following method:</p>
  820. <dl class="py method">
  821. <dt class="sig sig-object py" id="http.cookiejar.Cookie.is_expired">
  822. <span class="sig-prename descclassname"><span class="pre">Cookie.</span></span><span class="sig-name descname"><span class="pre">is_expired</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">now</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.is_expired" title="Link to this definition">¶</a></dt>
  823. <dd><p><code class="docutils literal notranslate"><span class="pre">True</span></code> if cookie has passed the time at which the server requested it should
  824. expire. If <em>now</em> is given (in seconds since the epoch), return whether the
  825. cookie has expired at the specified time.</p>
  826. </dd></dl>
  827. </section>
  828. <section id="examples">
  829. <h2>Examples<a class="headerlink" href="#examples" title="Link to this heading">¶</a></h2>
  830. <p>The first example shows the most common usage of <a class="reference internal" href="#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code></a>:</p>
  831. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">http.cookiejar</span><span class="o">,</span> <span class="nn">urllib.request</span>
  832. <span class="n">cj</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">cookiejar</span><span class="o">.</span><span class="n">CookieJar</span><span class="p">()</span>
  833. <span class="n">opener</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">build_opener</span><span class="p">(</span><span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">HTTPCookieProcessor</span><span class="p">(</span><span class="n">cj</span><span class="p">))</span>
  834. <span class="n">r</span> <span class="o">=</span> <span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;http://example.com/&quot;</span><span class="p">)</span>
  835. </pre></div>
  836. </div>
  837. <p>This example illustrates how to open a URL using your Netscape, Mozilla, or Lynx
  838. cookies (assumes Unix/Netscape convention for location of the cookies file):</p>
  839. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">http.cookiejar</span><span class="o">,</span> <span class="nn">urllib.request</span>
  840. <span class="n">cj</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">cookiejar</span><span class="o">.</span><span class="n">MozillaCookieJar</span><span class="p">()</span>
  841. <span class="n">cj</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s2">&quot;~&quot;</span><span class="p">),</span> <span class="s2">&quot;.netscape&quot;</span><span class="p">,</span> <span class="s2">&quot;cookies.txt&quot;</span><span class="p">))</span>
  842. <span class="n">opener</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">build_opener</span><span class="p">(</span><span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">HTTPCookieProcessor</span><span class="p">(</span><span class="n">cj</span><span class="p">))</span>
  843. <span class="n">r</span> <span class="o">=</span> <span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;http://example.com/&quot;</span><span class="p">)</span>
  844. </pre></div>
  845. </div>
  846. <p>The next example illustrates the use of <a class="reference internal" href="#http.cookiejar.DefaultCookiePolicy" title="http.cookiejar.DefaultCookiePolicy"><code class="xref py py-class docutils literal notranslate"><span class="pre">DefaultCookiePolicy</span></code></a>. Turn on
  847. <span class="target" id="index-25"></span><a class="rfc reference external" href="https://datatracker.ietf.org/doc/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies, be more strict about domains when setting and returning
  848. Netscape cookies, and block some domains from setting cookies or having them
  849. returned:</p>
  850. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">urllib.request</span>
  851. <span class="kn">from</span> <span class="nn">http.cookiejar</span> <span class="kn">import</span> <span class="n">CookieJar</span><span class="p">,</span> <span class="n">DefaultCookiePolicy</span>
  852. <span class="n">policy</span> <span class="o">=</span> <span class="n">DefaultCookiePolicy</span><span class="p">(</span>
  853. <span class="n">rfc2965</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">strict_ns_domain</span><span class="o">=</span><span class="n">Policy</span><span class="o">.</span><span class="n">DomainStrict</span><span class="p">,</span>
  854. <span class="n">blocked_domains</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;ads.net&quot;</span><span class="p">,</span> <span class="s2">&quot;.ads.net&quot;</span><span class="p">])</span>
  855. <span class="n">cj</span> <span class="o">=</span> <span class="n">CookieJar</span><span class="p">(</span><span class="n">policy</span><span class="p">)</span>
  856. <span class="n">opener</span> <span class="o">=</span> <span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">build_opener</span><span class="p">(</span><span class="n">urllib</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">HTTPCookieProcessor</span><span class="p">(</span><span class="n">cj</span><span class="p">))</span>
  857. <span class="n">r</span> <span class="o">=</span> <span class="n">opener</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;http://example.com/&quot;</span><span class="p">)</span>
  858. </pre></div>
  859. </div>
  860. </section>
  861. </section>
  862. <div class="clearer"></div>
  863. </div>
  864. </div>
  865. </div>
  866. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  867. <div class="sphinxsidebarwrapper">
  868. <div>
  869. <h3><a href="../contents.html">Table of Contents</a></h3>
  870. <ul>
  871. <li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> — Cookie handling for HTTP clients</a><ul>
  872. <li><a class="reference internal" href="#cookiejar-and-filecookiejar-objects">CookieJar and FileCookieJar Objects</a></li>
  873. <li><a class="reference internal" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers">FileCookieJar subclasses and co-operation with web browsers</a></li>
  874. <li><a class="reference internal" href="#cookiepolicy-objects">CookiePolicy Objects</a></li>
  875. <li><a class="reference internal" href="#defaultcookiepolicy-objects">DefaultCookiePolicy Objects</a></li>
  876. <li><a class="reference internal" href="#cookie-objects">Cookie Objects</a></li>
  877. <li><a class="reference internal" href="#examples">Examples</a></li>
  878. </ul>
  879. </li>
  880. </ul>
  881. </div>
  882. <div>
  883. <h4>Previous topic</h4>
  884. <p class="topless"><a href="http.cookies.html"
  885. title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> — HTTP state management</a></p>
  886. </div>
  887. <div>
  888. <h4>Next topic</h4>
  889. <p class="topless"><a href="xmlrpc.html"
  890. title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc</span></code> — XMLRPC server and client modules</a></p>
  891. </div>
  892. <div role="note" aria-label="source link">
  893. <h3>This Page</h3>
  894. <ul class="this-page-menu">
  895. <li><a href="../bugs.html">Report a Bug</a></li>
  896. <li>
  897. <a href="https://github.com/python/cpython/blob/main/Doc/library/http.cookiejar.rst"
  898. rel="nofollow">Show Source
  899. </a>
  900. </li>
  901. </ul>
  902. </div>
  903. </div>
  904. <div id="sidebarbutton" title="Collapse sidebar">
  905. <span>«</span>
  906. </div>
  907. </div>
  908. <div class="clearer"></div>
  909. </div>
  910. <div class="related" role="navigation" aria-label="related navigation">
  911. <h3>Navigation</h3>
  912. <ul>
  913. <li class="right" style="margin-right: 10px">
  914. <a href="../genindex.html" title="General Index"
  915. >index</a></li>
  916. <li class="right" >
  917. <a href="../py-modindex.html" title="Python Module Index"
  918. >modules</a> |</li>
  919. <li class="right" >
  920. <a href="xmlrpc.html" title="xmlrpc — XMLRPC server and client modules"
  921. >next</a> |</li>
  922. <li class="right" >
  923. <a href="http.cookies.html" title="http.cookies — HTTP state management"
  924. >previous</a> |</li>
  925. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  926. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  927. <li class="switchers">
  928. <div class="language_switcher_placeholder"></div>
  929. <div class="version_switcher_placeholder"></div>
  930. </li>
  931. <li>
  932. </li>
  933. <li id="cpython-language-and-version">
  934. <a href="../index.html">3.12.3 Documentation</a> &#187;
  935. </li>
  936. <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
  937. <li class="nav-item nav-item-2"><a href="internet.html" >Internet Protocols and Support</a> &#187;</li>
  938. <li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> — Cookie handling for HTTP clients</a></li>
  939. <li class="right">
  940. <div class="inline-search" role="search">
  941. <form class="inline-search" action="../search.html" method="get">
  942. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  943. <input type="submit" value="Go" />
  944. </form>
  945. </div>
  946. |
  947. </li>
  948. <li class="right">
  949. <label class="theme-selector-label">
  950. Theme
  951. <select class="theme-selector" oninput="activateTheme(this.value)">
  952. <option value="auto" selected>Auto</option>
  953. <option value="light">Light</option>
  954. <option value="dark">Dark</option>
  955. </select>
  956. </label> |</li>
  957. </ul>
  958. </div>
  959. <div class="footer">
  960. &copy;
  961. <a href="../copyright.html">
  962. Copyright
  963. </a>
  964. 2001-2024, Python Software Foundation.
  965. <br />
  966. This page is licensed under the Python Software Foundation License Version 2.
  967. <br />
  968. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  969. <br />
  970. See <a href="/license.html">History and License</a> for more information.<br />
  971. <br />
  972. The Python Software Foundation is a non-profit corporation.
  973. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  974. <br />
  975. <br />
  976. Last updated on Apr 09, 2024 (13:47 UTC).
  977. <a href="/bugs.html">Found a bug</a>?
  978. <br />
  979. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
  980. </div>
  981. </body>
  982. </html>
上海开阖软件有限公司 沪ICP备12045867号-1