826 lines
100 KiB
HTML
826 lines
100 KiB
HTML
|
||
<!DOCTYPE html>
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh_CN">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
||
|
||
<title>http.cookiejar —— HTTP 客户端的 Cookie 处理 — Python 3.8.20 文档</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
||
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
||
|
||
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
||
<script src="../_static/jquery.js"></script>
|
||
<script src="../_static/underscore.js"></script>
|
||
<script src="../_static/doctools.js"></script>
|
||
<script src="../_static/language_data.js"></script>
|
||
<script src="../_static/translations.js"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="在 Python 3.8.20 文档 中搜索"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="关于这些文档" href="../about.html" />
|
||
<link rel="index" title="索引" href="../genindex.html" />
|
||
<link rel="search" title="搜索" href="../search.html" />
|
||
<link rel="copyright" title="版权所有" href="../copyright.html" />
|
||
<link rel="next" title="xmlrpc --- XMLRPC 服务端与客户端模块" href="xmlrpc.html" />
|
||
<link rel="prev" title="http.cookies --- HTTP状态管理" href="http.cookies.html" />
|
||
<link rel="canonical" href="https://docs.python.org/3/library/http.cookiejar.html" />
|
||
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/menu.js"></script>
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<nav class="nav-content" role="navigation">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Logo"/>
|
||
</a>
|
||
<div class="version_switcher_placeholder"></div>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero"
|
||
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" fill="#444"></path>
|
||
</svg>
|
||
<input type="text" name="q" aria-label="快速搜索"/>
|
||
<input type="submit" value="转向"/>
|
||
</form>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> —— HTTP 客户端的 Cookie 处理</a><ul>
|
||
<li><a class="reference internal" href="#cookiejar-and-filecookiejar-objects">CookieJar 和 FileCookieJar 对象</a></li>
|
||
<li><a class="reference internal" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers">FileCookieJar 的子类及其与 Web 浏览器的协同</a></li>
|
||
<li><a class="reference internal" href="#cookiepolicy-objects">CookiePolicy 对象</a></li>
|
||
<li><a class="reference internal" href="#defaultcookiepolicy-objects">DefaultCookiePolicy 对象</a></li>
|
||
<li><a class="reference internal" href="#cookie-objects">Cookie 对象</a></li>
|
||
<li><a class="reference internal" href="#examples">例子</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="http.cookies.html"
|
||
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> --- HTTP状态管理</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="xmlrpc.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc</span></code> --- XMLRPC 服务端与客户端模块</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/http.cookiejar.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
|
||
这个文档所针对的是一个已不再受支持的 Python 旧版本。
|
||
你应当升级版本,并阅读
|
||
<a href="/3/library/http.cookiejar.html"> Python 当前稳定版本的文档</a>.
|
||
</div>
|
||
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
accesskey="I">索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="xmlrpc.html" title="xmlrpc --- XMLRPC 服务端与客户端模块"
|
||
accesskey="N">下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="http.cookies.html" title="http.cookies --- HTTP状态管理"
|
||
accesskey="P">上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">互联网协议和支持</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="module-http.cookiejar">
|
||
<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> —— HTTP 客户端的 Cookie 处理<a class="headerlink" href="#module-http.cookiejar" title="永久链接至标题">¶</a></h1>
|
||
<p><strong>源代码:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.8/Lib/http/cookiejar.py">Lib/http/cookiejar.py</a></p>
|
||
<hr class="docutils" />
|
||
<p><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> 模块定义了用于自动处理 HTTP cookie 的类。这对访问需要小段数据 —— <em class="dfn">cookies</em> 的网站很有用,这些数据由 Web 服务器的 HTTP 响应在客户端计算机上设置,然后在以后的 HTTP 请求中返回给服务器。</p>
|
||
<p>常规的 Netscape Cookie 协议和 <span class="target" id="index-52"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 定义的协议都可以处理。RFC 2965 处理默认情况下处于关闭状态。 <span class="target" id="index-53"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie 被解析为 Netscape cookie,随后根据有效的 'policy' 被视为 Netscape 或 RFC 2965 cookie。 请注意,Internet 上的大多数 cookie 是 Netscape cookie。 <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> 尝试遵循事实上的 Netscape cookie 协议(与原始 Netscape 规范中所设定的协议大不相同),包括注意 <code class="docutils literal notranslate"><span class="pre">max-age</span></code> 和 <code class="docutils literal notranslate"><span class="pre">port</span></code> RFC 2965 引入的 cookie 属性。</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>在 <em class="mailheader">Set-Cookie</em> 和 <em class="mailheader">Set-Cookie2</em> 头中找到的各种命名参数通常指 <em class="dfn">attributes</em>。为了不与 Python 属性相混淆,模块文档使用 <em class="dfn">cookie-attribute</em> 代替。</p>
|
||
</div>
|
||
<p>此模块定义了以下异常:</p>
|
||
<dl class="exception">
|
||
<dt id="http.cookiejar.LoadError">
|
||
<em class="property">exception </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">LoadError</code><a class="headerlink" href="#http.cookiejar.LoadError" title="永久链接至目标">¶</a></dt>
|
||
<dd><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> 实例在从文件加载 cookies 出错时抛出这个异常。 <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> 是 <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>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span>LoadError 成为 <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> 的子类而不是 <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>。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<p>提供了以下类:</p>
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.CookieJar">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">CookieJar</code><span class="sig-paren">(</span><em class="sig-param">policy=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar" title="永久链接至目标">¶</a></dt>
|
||
<dd><p><em>policy</em> 是实现了 <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> 接口的一个对象。</p>
|
||
<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> 类储存 HTTP cookies。它从 HTTP 请求提取 cookies,并在 HTTP 响应中返回它们。 <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> 实例在必要时自动处理包含 cookie 的到期情况。子类还负责储存和从文件或数据库中查找 cookies。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.FileCookieJar">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">FileCookieJar</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">delayload=None</em>, <em class="sig-param">policy=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar" title="永久链接至目标">¶</a></dt>
|
||
<dd><p><em>policy</em> 是实现了 <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> 接口的一个对象。对于其他参数,参考相应属性的文档。</p>
|
||
<p>一个可以从硬盘中文件加载或保存 cookie 的 <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>。 Cookies <strong>不</strong> 会在 <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> 或 <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> 方法调用前从命名的文件中加载。子类的文档位于段落 <a class="reference internal" href="#file-cookie-jar-classes"><span class="std std-ref">FileCookieJar 的子类及其与 Web 浏览器的协同</span></a>。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.8 版更改: </span>文件名形参支持 <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.CookiePolicy">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">CookiePolicy</code><a class="headerlink" href="#http.cookiejar.CookiePolicy" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>此类负责确定是否应从服务器接受每个 cookie 或将其返回给服务器。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">DefaultCookiePolicy</code><span class="sig-paren">(</span><em class="sig-param">blocked_domains=None</em>, <em class="sig-param">allowed_domains=None</em>, <em class="sig-param">netscape=True</em>, <em class="sig-param">rfc2965=False</em>, <em class="sig-param">rfc2109_as_netscape=None</em>, <em class="sig-param">hide_cookie2=False</em>, <em class="sig-param">strict_domain=False</em>, <em class="sig-param">strict_rfc2965_unverifiable=True</em>, <em class="sig-param">strict_ns_unverifiable=False</em>, <em class="sig-param">strict_ns_domain=DefaultCookiePolicy.DomainLiberal</em>, <em class="sig-param">strict_ns_set_initial_dollar=False</em>, <em class="sig-param">strict_ns_set_path=False</em>, <em class="sig-param">secure_protocols=("https"</em>, <em class="sig-param">"wss")</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>构造参数只能以关键字参数传递,<em>blocked_domains</em> 是一个我们既不会接受也不会返回 cookie 的域名序列。<em>allowed_domains</em> 如果不是 <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>,则是仅有的我们会接受或返回的域名序列。<em>secure_protocols</em> 是可以添加安全 cookies 的协议序列。默认将 <em>https</em> 和 <em>wss</em> (安全 WebSocket)考虑为安全协议。对于其他参数,参考 <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> 和 <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> 对象的文档。</p>
|
||
<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> 实现了 Netscape 和 <span class="target" id="index-54"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> cookies 的标准接受 / 拒绝规则。 默认情况下,<span class="target" id="index-55"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookies(即在 <em class="mailheader">Set-Cookie</em> 头中收到的 cookie-attribute 版本为 1 的 cookies )将按照 RFC 2965 规则处理。 然而,如果 RFC 2965 的处理被关闭,或者 <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> 为 <code class="docutils literal notranslate"><span class="pre">True</span></code>,<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> 实例的 <code class="xref py py-attr docutils literal notranslate"><span class="pre">version</span></code> 属性设置将被为 0, RFC 2109 cookies <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> 实例将 "降级" 为 Netscape cookies。 <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> 也提供一些参数以允许一些策略微调。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.Cookie">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">Cookie</code><a class="headerlink" href="#http.cookiejar.Cookie" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>这个类代表 Netscape、<span class="target" id="index-56"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> 和 <span class="target" id="index-57"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 的 cookie 。 我们不希望 <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> 的用户构建他们自己的 <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> 实例。 如果有必要,请在一个 <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> 实例上调用 <code class="xref py py-meth docutils literal notranslate"><span class="pre">make_cookies()</span></code> 。</p>
|
||
</dd></dl>
|
||
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">参见</p>
|
||
<dl class="simple">
|
||
<dt>模块 <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 打开带有自动的 cookie 处理。</p>
|
||
</dd>
|
||
<dt>模块 <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类,主要是对服务端代码有用。 <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> 和 <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> 模块不相互依赖。</p>
|
||
</dd>
|
||
<dt><a class="reference external" href="https://curl.haxx.se/rfc/cookie_spec.html">https://curl.haxx.se/rfc/cookie_spec.html</a></dt><dd><p>原始 Netscape cookie 协议的规范。 虽然这仍然是主流协议,但所有主要浏览器(以及 <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> )实现的 "Netscape cookie协议" 与 <code class="docutils literal notranslate"><span class="pre">cookie_spec.html</span></code> 中描述的协议仅有几分相似之处。</p>
|
||
</dd>
|
||
<dt><span class="target" id="index-58"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> - HTTP状态管理机制</dt><dd><p>被 <span class="target" id="index-59"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 所取代。使用 <em class="mailheader">Set-Cookie</em> version=1 。</p>
|
||
</dd>
|
||
<dt><span class="target" id="index-60"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> - HTTP状态管理机制</dt><dd><p>修正了错误的 Netscape 协议。 使用 <em class="mailheader">Set-Cookie2</em> 来代替 <em class="mailheader">Set-Cookie</em> 。 没有广泛被使用。</p>
|
||
</dd>
|
||
<dt><a class="reference external" href="http://kristol.org/cookie/errata.html">http://kristol.org/cookie/errata.html</a></dt><dd><p>未完成的 <span class="target" id="index-61"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 勘误表。</p>
|
||
</dd>
|
||
</dl>
|
||
<p><span class="target" id="index-62"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2964.html"><strong>RFC 2964</strong></a> - HTTP状态管理使用方法</p>
|
||
</div>
|
||
<section id="cookiejar-and-filecookiejar-objects">
|
||
<span id="cookie-jar-objects"></span><h2>CookieJar 和 FileCookieJar 对象<a class="headerlink" href="#cookiejar-and-filecookiejar-objects" title="永久链接至标题">¶</a></h2>
|
||
<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> 对象支持 <a class="reference internal" href="../glossary.html#term-iterator"><span class="xref std std-term">iterator</span></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> 对象。</p>
|
||
<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> 有以下方法:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.add_cookie_header">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">add_cookie_header</code><span class="sig-paren">(</span><em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.add_cookie_header" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>在 <em>request</em> 中添加正确的 <em class="mailheader">Cookie</em> 头。</p>
|
||
<p>如果策略允许(即 <code class="xref py py-attr docutils literal notranslate"><span class="pre">rfc2965</span></code> 和 <code class="xref py py-attr docutils literal notranslate"><span class="pre">hide_cookie2</span></code> 属性在 <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> 的 <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> 实例中分别为 True 和 False ), <em class="mailheader">Cookie2</em> 标头也会在适当时候添加。</p>
|
||
<p>如 <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> 所记载的, <em>request</em> 对象(通常是一个 <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> 实例)必须支持 <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">get_host()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_type()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">unverifiable()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">has_header()</span></code>, <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> 和 <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> 属性。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span><em>request</em> 对象需要 <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> 属性。对已废弃的方法 <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_origin_req_host()</span></code> 的依赖已被移除。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.extract_cookies">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">extract_cookies</code><span class="sig-paren">(</span><em class="sig-param">response</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.extract_cookies" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>从HTTP <em>response</em> 中提取 cookie,并在政策允许的情况下,将它们存储在 <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> 中。</p>
|
||
<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> 将 在*response* 参数中寻找允许的 <em class="mailheader">Set-Cookie</em> 和 <em class="mailheader">Set-Cookie2</em> 头信息,并适当地存储cookies(须经 <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> 方法批准)。</p>
|
||
<p><em>response</em> 对象(通常是调用 <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> 或类似方法的结果)应该支持 <code class="xref py py-meth docutils literal notranslate"><span class="pre">info()</span></code> 方法,它返回 <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> 实例。</p>
|
||
<p>如 <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> 的文档所说,<em>request</em> 对象(通常是一个 <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> 实例)必须支持 <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">get_host()</span></code>, <code class="xref py py-meth docutils literal notranslate"><span class="pre">unverifiable()</span></code> 和 <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> 属性。 该请求用于设置 cookie-attributes 的默认值,以及检查 cookie 是否允许被设置。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.3 版更改: </span><em>request</em> 对象需要 <code class="xref py py-attr docutils literal notranslate"><span class="pre">origin_req_host</span></code> 属性。对已废弃的方法 <code class="xref py py-meth docutils literal notranslate"><span class="pre">get_origin_req_host()</span></code> 的依赖已被移除。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.set_policy">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">set_policy</code><span class="sig-paren">(</span><em class="sig-param">policy</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_policy" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>设置要使用的 <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> 实例。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.make_cookies">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">make_cookies</code><span class="sig-paren">(</span><em class="sig-param">response</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.make_cookies" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回从 <em>response</em> 对象中提取的 <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> 对象的序列。</p>
|
||
<p>关于 <em>response</em> 和 <em>request</em> 参数所需的接口,请参见 <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> 的文档。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.set_cookie_if_ok">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">set_cookie_if_ok</code><span class="sig-paren">(</span><em class="sig-param">cookie</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_cookie_if_ok" title="永久链接至目标">¶</a></dt>
|
||
<dd><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> 。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.set_cookie">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">set_cookie</code><span class="sig-paren">(</span><em class="sig-param">cookie</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.set_cookie" title="永久链接至目标">¶</a></dt>
|
||
<dd><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>,不需要检查策略是否应该被设置。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.clear">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">clear</code><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param">domain</em><span class="optional">[</span>, <em class="sig-param">path</em><span class="optional">[</span>, <em class="sig-param">name</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="永久链接至目标">¶</a></dt>
|
||
<dd><p>清除一些cookie。</p>
|
||
<p>如果调用时没有参数,则清除所有的cookie。 如果给定一个参数,只有属于该 <em>domain</em> 的cookies将被删除。如果给定两个参数,那么属于指定的 <em>domain</em> 和 URL <em>path</em> 的cookie将被删除。 如果给定三个参数,那么属于指定的 <em>domain</em> 、<em>path</em> 和 <em>name</em> 的cookie将被删除</p>
|
||
<p>如果不存在匹配的 cookie,则会引发 <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>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookieJar.clear_session_cookies">
|
||
<code class="sig-prename descclassname">CookieJar.</code><code class="sig-name descname">clear_session_cookies</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookieJar.clear_session_cookies" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>丢弃所有的会话 cookie。</p>
|
||
<p>丢弃所有 <code class="xref py py-attr docutils literal notranslate"><span class="pre">discard</span></code> 属性为真值的已包含 cookie(通常是因为它们没有 <code class="docutils literal notranslate"><span class="pre">max-age</span></code> 或 <code class="docutils literal notranslate"><span class="pre">expires</span></code> cookie 属性,或者显式的 <code class="docutils literal notranslate"><span class="pre">discard</span></code> cookie 属性)。 对于交互式浏览器,会话的结束通常对应于关闭浏览器窗口。</p>
|
||
<p>请注意 <code class="xref py py-meth docutils literal notranslate"><span class="pre">save()</span></code> 方法并不会保存会话的 cookie,除非你通过传入一个真值给 <em>ignore_discard</em> 参数来提出明确的要求。</p>
|
||
</dd></dl>
|
||
|
||
<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> 实现了下列附加方法:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.FileCookieJar.save">
|
||
<code class="sig-prename descclassname">FileCookieJar.</code><code class="sig-name descname">save</code><span class="sig-paren">(</span><em class="sig-param">filename=None</em>, <em class="sig-param">ignore_discard=False</em>, <em class="sig-param">ignore_expires=False</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.save" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>将 cookie 保存到文件。</p>
|
||
<p>基类会引发 <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>。 子类可以继续不实现该方法。</p>
|
||
<p><em>filename</em> 为要用来保存 cookie 的文件名称。 如果未指定 <em>filename</em>,则会使用 <code class="xref py py-attr docutils literal notranslate"><span class="pre">self.filename</span></code> (该属性默认为传给构造器的值,如果有传入的话);如果 <code class="xref py py-attr docutils literal notranslate"><span class="pre">self.filename</span></code> 为 <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>,则会引发 <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>。</p>
|
||
<p><em>ignore_discard</em>: 即使设定了丢弃 cookie 仍然保存它们。 <em>ignore_expires</em>: 即使 cookie 已超期仍然保存它们</p>
|
||
<p>文件如果已存在则会被覆盖,这将清除其所包含的全部 cookie。 已保存的 cookie 可以使用 <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> 或 <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> 方法来恢复。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.FileCookieJar.load">
|
||
<code class="sig-prename descclassname">FileCookieJar.</code><code class="sig-name descname">load</code><span class="sig-paren">(</span><em class="sig-param">filename=None</em>, <em class="sig-param">ignore_discard=False</em>, <em class="sig-param">ignore_expires=False</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.load" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>从文件加载 cookie。</p>
|
||
<p>旧的 cookie 将被保留,除非是被新加载的 cookie 所覆盖。</p>
|
||
<p>其参数与 <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>
|
||
<p>指定的文件必须为该类所能理解的格式,否则将引发 <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>。 也可能会引发 <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>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 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>,现在是 <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>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.FileCookieJar.revert">
|
||
<code class="sig-prename descclassname">FileCookieJar.</code><code class="sig-name descname">revert</code><span class="sig-paren">(</span><em class="sig-param">filename=None</em>, <em class="sig-param">ignore_discard=False</em>, <em class="sig-param">ignore_expires=False</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.FileCookieJar.revert" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>清除所有 cookie 并从保存的文件重新加载 cookie。</p>
|
||
<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> 可以引发与 <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> 相同的异常。 如果执行失败,对象的状态将不会被改变。</p>
|
||
</dd></dl>
|
||
|
||
<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> 实例具有下列公有属性:</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.FileCookieJar.filename">
|
||
<code class="sig-prename descclassname">FileCookieJar.</code><code class="sig-name descname">filename</code><a class="headerlink" href="#http.cookiejar.FileCookieJar.filename" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>默认的保存 cookie 的文件的文件名。 该属性可以被赋值。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.FileCookieJar.delayload">
|
||
<code class="sig-prename descclassname">FileCookieJar.</code><code class="sig-name descname">delayload</code><a class="headerlink" href="#http.cookiejar.FileCookieJar.delayload" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如为真值,则惰性地从磁盘加载 cookie。 该属性不应当被赋值。 这只是一个提示,因为它只会影响性能,而不会影响行为(除非磁盘中的 cookie 被改变了)。 <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> 对象可能会忽略它。 任何包括在标准库中的 <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> 类都不会惰性地加载 cookie。</p>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="filecookiejar-subclasses-and-co-operation-with-web-browsers">
|
||
<span id="file-cookie-jar-classes"></span><h2>FileCookieJar 的子类及其与 Web 浏览器的协同<a class="headerlink" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers" title="永久链接至标题">¶</a></h2>
|
||
<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> 子类用于读取和写入。</p>
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.MozillaCookieJar">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">MozillaCookieJar</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">delayload=None</em>, <em class="sig-param">policy=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.MozillaCookieJar" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>一个能够以 Mozilla <code class="docutils literal notranslate"><span class="pre">cookies.txt</span></code> 文件格式(该格式也被 Lynx 和 Netscape 浏览器所使用)从磁盘加载和存储 cookie 的 <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>。</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">注解</p>
|
||
<p>这会丢失有关 <span class="target" id="index-63"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> cookie 的信息,以及有关较新或非标准的 cookie 属性例如 <code class="docutils literal notranslate"><span class="pre">port</span></code>。</p>
|
||
</div>
|
||
<div class="admonition warning">
|
||
<p class="admonition-title">警告</p>
|
||
<p>在存储之前备份你的 cookie,如果你的 cookie 丢失/损坏会造成麻烦的话(有一些微妙的因素可能导致文件在加载/保存的往返过程中发生细微的变化)。</p>
|
||
</div>
|
||
<p>还要注意在 Mozilla 运行期间保存的 cookie 将可能被 Mozilla 清除。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="class">
|
||
<dt id="http.cookiejar.LWPCookieJar">
|
||
<em class="property">class </em><code class="sig-prename descclassname">http.cookiejar.</code><code class="sig-name descname">LWPCookieJar</code><span class="sig-paren">(</span><em class="sig-param">filename</em>, <em class="sig-param">delayload=None</em>, <em class="sig-param">policy=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.LWPCookieJar" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>一个能够以 libwww-perl 库的 <code class="docutils literal notranslate"><span class="pre">Set-Cookie3</span></code> 文件格式从磁盘加载和存储 cookie 的 <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>。 这适用于当你想以人类可读的文件来保存 cookie 的情况。</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">在 3.8 版更改: </span>文件名形参支持 <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>。</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="cookiepolicy-objects">
|
||
<span id="cookie-policy-objects"></span><h2>CookiePolicy 对象<a class="headerlink" href="#cookiepolicy-objects" title="永久链接至标题">¶</a></h2>
|
||
<p>实现了 <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> 接口的对象具有下列方法:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookiePolicy.set_ok">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">set_ok</code><span class="sig-paren">(</span><em class="sig-param">cookie</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.set_ok" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回指明是否应当从服务器接受 cookie 的布尔值。</p>
|
||
<p><em>cookie</em> 是一个 <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> 实例。 <em>request</em> 是一个实现了由 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookiePolicy.return_ok">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">return_ok</code><span class="sig-paren">(</span><em class="sig-param">cookie</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.return_ok" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回指明是否应当将 cookie 返回给服务器的布尔值。</p>
|
||
<p><em>cookie</em> 是一个 <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> 实例。 <em>request</em> 是一个实现了 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookiePolicy.domain_return_ok">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">domain_return_ok</code><span class="sig-paren">(</span><em class="sig-param">domain</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.domain_return_ok" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>对于给定的 cookie 域如果不应当返回 cookie 则返回 <code class="docutils literal notranslate"><span class="pre">False</span></code>。</p>
|
||
<p>此方法是一种优化操作。 它消除了检查每个具有特定域的 cookie 的必要性(这可能会涉及读取许多文件)。 从 <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> 和 <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> 返回真值并将所有工作留给 <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>
|
||
<p>如果 <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> 为 cookie 域返回真值,则会为 cookie 路径调用 <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>。 在其他情况下,则不会为该 cookie 域调用 <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> 和 <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>。 如果 <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> 返回真值,则会调用 <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> 并附带 <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> 对象本身以进行全面检查。 在其他情况下,都永远不会为该 cookie 路径调用 <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>
|
||
<p>请注意 <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> 会针对每个 <em>cookie</em> 域被调用,而非只针对 <em>request</em> 域。 例如,该函数会针对 <code class="docutils literal notranslate"><span class="pre">".example.com"</span></code> 和 <code class="docutils literal notranslate"><span class="pre">"www.example.com"</span></code> 被调用,如果 request 域为 <code class="docutils literal notranslate"><span class="pre">"www.example.com"</span></code> 的话。 对于 <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>
|
||
<p><em>request</em> 参数与 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.CookiePolicy.path_return_ok">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">path_return_ok</code><span class="sig-paren">(</span><em class="sig-param">path</em>, <em class="sig-param">request</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.CookiePolicy.path_return_ok" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>对于给定的 cookie 路径如果不应当返回 cookie 返回 <code class="docutils literal notranslate"><span class="pre">False</span></code>。</p>
|
||
<p>请参阅 <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>
|
||
</dd></dl>
|
||
|
||
<p>除了实现上述方法,<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> 接口的实现还必须提供下列属性,指明应当使用哪种协议以及如何使用。 所有这些属性都可以被赋值。</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.CookiePolicy.netscape">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">netscape</code><a class="headerlink" href="#http.cookiejar.CookiePolicy.netscape" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>实现 Netscape 协议。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.CookiePolicy.rfc2965">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">rfc2965</code><a class="headerlink" href="#http.cookiejar.CookiePolicy.rfc2965" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>实现 <span class="target" id="index-64"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 协议。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.CookiePolicy.hide_cookie2">
|
||
<code class="sig-prename descclassname">CookiePolicy.</code><code class="sig-name descname">hide_cookie2</code><a class="headerlink" href="#http.cookiejar.CookiePolicy.hide_cookie2" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>不要向请求添加 <em class="mailheader">Cookie2</em> 标头(此标头是提示服务器请求方能识别 <span class="target" id="index-65"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> cookie)。</p>
|
||
</dd></dl>
|
||
|
||
<p>定义 <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> 类的最适用方式是通过子类化 <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> 并重写部分或全部上述的方法。 <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> 本身可被用作 '空策略' 以允许设置和接收所有的 cookie(但这没有什么用处)。</p>
|
||
</section>
|
||
<section id="defaultcookiepolicy-objects">
|
||
<span id="default-cookie-policy-objects"></span><h2>DefaultCookiePolicy 对象<a class="headerlink" href="#defaultcookiepolicy-objects" title="永久链接至标题">¶</a></h2>
|
||
<p>实现接收和返回 cookie 的标准规则。</p>
|
||
<p><span class="target" id="index-66"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 和 Netscape cookie 均被涵盖。 RFC 2965 处理默认关闭。</p>
|
||
<p>提供自定义策略的最容易方式是重写此类并在你重写的实现中添加你自己的额外检查之前调用其方法:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">http.cookiejar</span>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<span class="k">return</span> <span class="kc">False</span>
|
||
<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>
|
||
<span class="k">return</span> <span class="kc">False</span>
|
||
<span class="k">return</span> <span class="kc">True</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>在实现 <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> 接口所要求的特性之外,该类还允许你阻止和允许特定的域设置和接收 cookie。 还有一些严格性开关允许你将相当宽松的 Netscape 协议规则收紧一点(代价是可能会阻止某些无害的 cookie)。</p>
|
||
<p>提供域名黑名单和白名单(默认情况下均关闭)。只有不在黑名单中和在白名单中(如果白名单处于激活状态)的域名才能使用 cookie 的设置和发送。 请使用 <em>blocked_domains</em> 构造参数、 <code class="xref py py-meth docutils literal notranslate"><span class="pre">blocked_domains()</span></code> 和 <code class="xref py py-meth docutils literal notranslate"><span class="pre">set_blocked_domains()</span></code> 方法(以及 <em>allowed_domains</em> 的相应参数和方法)。 如果你设置了白名单,可以通过将其设置为 <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>
|
||
<p>阻止或允许列表中不以点开头的域名必须与 cookie 域名相等才能匹配。 例如, <code class="docutils literal notranslate"><span class="pre">"example.com"</span></code> 与黑名单条目 <code class="docutils literal notranslate"><span class="pre">"example.com"</span></code> 匹配,但 <code class="docutils literal notranslate"><span class="pre">"www.example.com"</span></code> 不匹配。 以点开头的域也会与更具体的域匹配。例如, <code class="docutils literal notranslate"><span class="pre">"www.example.com"</span></code> 和 <code class="docutils literal notranslate"><span class="pre">"www.coyote.example.com"</span></code> 都匹配 <code class="docutils literal notranslate"><span class="pre">".example.com"</span></code> (但 <code class="docutils literal notranslate"><span class="pre">"example.com"</span></code> 本身不匹配)。 IP 地址是个例外,必须完全匹配。 例如,如果 blocked_domains 包含 <code class="docutils literal notranslate"><span class="pre">"192.168.1.2"</span></code> 和 <code class="docutils literal notranslate"><span class="pre">".168.1.2"</span></code> ,则 192.168.1.2 会被屏蔽,但 193.168.1.2 不会。</p>
|
||
<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> 实现了下列附加方法:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.blocked_domains">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">blocked_domains</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.blocked_domains" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回被阻止域的序列(元组类型)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.set_blocked_domains">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">set_blocked_domains</code><span class="sig-paren">(</span><em class="sig-param">blocked_domains</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.set_blocked_domains" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>设置被阻止域的序列。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.is_blocked">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">is_blocked</code><span class="sig-paren">(</span><em class="sig-param">domain</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.is_blocked" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回 <em>domain</em> 是否在设置或接收 cookie 的黑名单上。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.allowed_domains">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">allowed_domains</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.allowed_domains" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.set_allowed_domains">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">set_allowed_domains</code><span class="sig-paren">(</span><em class="sig-param">allowed_domains</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.set_allowed_domains" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>设置被允许域的序列,或者为 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.is_not_allowed">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">is_not_allowed</code><span class="sig-paren">(</span><em class="sig-param">domain</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.is_not_allowed" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>返回 <em>domain</em> 是否不在设置或接收 cookie 的白名单上。</p>
|
||
</dd></dl>
|
||
|
||
<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> 实例具有下列属性,它们都是基于同名的构造器参数来初始化的,并且都可以被赋值。</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">rfc2109_as_netscape</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.rfc2109_as_netscape" title="永久链接至目标">¶</a></dt>
|
||
<dd><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> 实例将 <span class="target" id="index-67"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie (即在带有 version 值为 1 的 cookie 属性的 <em class="mailheader">Set-Cookie</em> 标头中接收到的 cookie) 降级为 Netscape cookie: 即将 <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> 实例的 version 属性设为 0。 默认值为 <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>,在此情况下 RFC 2109 cookie 仅在s are downgraded if and only if <span class="target" id="index-68"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 处理被关闭时才会被降级。 因此,RFC 2109 cookie 默认会被降级。</p>
|
||
</dd></dl>
|
||
|
||
<p>通用严格性开关:</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_domain">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_domain</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_domain" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>不允许网站设置带国家码顶级域的包含两部分的域名例如 <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> 等。 此开关尚未十分完善,并不保证有效!</p>
|
||
</dd></dl>
|
||
|
||
<p><span class="target" id="index-69"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 协议严格性开关:</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_rfc2965_unverifiable">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_rfc2965_unverifiable</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_rfc2965_unverifiable" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>遵循针对不可验证事务的 <span class="target" id="index-70"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 规则(不可验证事务通常是由重定向或请求发布在其它网站的图片导致的)。 如果该属性为假值,则 <em>永远不会</em> 基于可验证性而阻止 cookie。</p>
|
||
</dd></dl>
|
||
|
||
<p>Netscape 协议严格性开关:</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_ns_unverifiable">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_ns_unverifiable</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_unverifiable" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>即便是对 Netscape cookie 也要应用 <span class="target" id="index-71"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 规则。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_ns_domain">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_ns_domain</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_domain" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>指明针对 Netscape cookie 的域匹配规则的严格程度。 可接受的值见下文。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_ns_set_initial_dollar">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_ns_set_initial_dollar</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_set_initial_dollar" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>忽略 Set-Cookie 中的 cookie: 即名称前缀为 <code class="docutils literal notranslate"><span class="pre">'{TX-PL-LABEL}#x27;</span></code> 的标头。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.strict_ns_set_path">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">strict_ns_set_path</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.strict_ns_set_path" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>不允许设置路径与请求 URL 路径不匹配的 cookie。</p>
|
||
</dd></dl>
|
||
|
||
<p><code class="xref py py-attr docutils literal notranslate"><span class="pre">strict_ns_domain</span></code> 是一组旗标。 其值是通过或运算来构造的(例如,<code class="docutils literal notranslate"><span class="pre">DomainStrictNoDots|DomainStrictNonDomain</span></code> 表示同时设置两个旗标)。</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.DomainStrictNoDots">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">DomainStrictNoDots</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrictNoDots" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>当设置 cookie 是,'host prefix' 不可包含点号(例如 <code class="docutils literal notranslate"><span class="pre">www.foo.bar.com</span></code> 不能为 <code class="docutils literal notranslate"><span class="pre">.bar.com</span></code> 设置 cookie,因为 <code class="docutils literal notranslate"><span class="pre">www.foo</span></code> 包含了一个点号)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.DomainStrictNonDomain">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">DomainStrictNonDomain</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrictNonDomain" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>没有显式指明Cookies that did not explicitly specify a <code class="docutils literal notranslate"><span class="pre">domain</span></code> cookie 属性的 cookie 只能被返回给与设置 cookie 的域相同的域(例如 <code class="docutils literal notranslate"><span class="pre">spam.example.com</span></code> 不会是来自 <code class="docutils literal notranslate"><span class="pre">example.com</span></code> 的返回 cookie,如果该域名没有 <code class="docutils literal notranslate"><span class="pre">domain</span></code> cookie 属性的话)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.DomainRFC2965Match">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">DomainRFC2965Match</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainRFC2965Match" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>当设置 cookie 时,要求完整的 <span class="target" id="index-72"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 域匹配。</p>
|
||
</dd></dl>
|
||
|
||
<p>下列属性是为方便使用而提供的,是上述旗标的几种最常用组合:</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.DomainLiberal">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">DomainLiberal</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainLiberal" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>等价于 0 (即所有上述 Netscape 域严格性旗标均停用)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.DefaultCookiePolicy.DomainStrict">
|
||
<code class="sig-prename descclassname">DefaultCookiePolicy.</code><code class="sig-name descname">DomainStrict</code><a class="headerlink" href="#http.cookiejar.DefaultCookiePolicy.DomainStrict" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>等价于 <code class="docutils literal notranslate"><span class="pre">DomainStrictNoDots|DomainStrictNonDomain</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="cookie-objects">
|
||
<h2>Cookie 对象<a class="headerlink" href="#cookie-objects" title="永久链接至标题">¶</a></h2>
|
||
<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> 实例具有与各种 cookie 标准中定义的标准 cookie 属性大致对应的 Python 属性。 这并非一一对应,因为存在复杂的赋默认值的规则,因为 <code class="docutils literal notranslate"><span class="pre">max-age</span></code> 和 <code class="docutils literal notranslate"><span class="pre">expires</span></code> cookie 属性包含相同信息,也因为 <span class="target" id="index-73"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie 可以被 <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> 从第 1 版 '降级为' 第 0 版 (Netscape) cookie。</p>
|
||
<p>对这些属性的赋值在 <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> 方法的极少数情况以外应该都是不必要的。 该类不会强制内部一致性,因此如果这样做则你应当清楚自己在做什么。</p>
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.version">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">version</code><a class="headerlink" href="#http.cookiejar.Cookie.version" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>整数或 <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 cookie 的 <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-74"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> 和 <span class="target" id="index-75"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie 的 <code class="docutils literal notranslate"><span class="pre">version</span></code> cookie 属性值为 1。 但是,请注意 <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> 可以将 RFC 2109 cookie '降级' 为 Netscape cookie,在此情况下 <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。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.name">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">name</code><a class="headerlink" href="#http.cookiejar.Cookie.name" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>Cookie 名称(一个字符串)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.value">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">value</code><a class="headerlink" href="#http.cookiejar.Cookie.value" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>Cookie 值(一个字符串),或为 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.port">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">port</code><a class="headerlink" href="#http.cookiejar.Cookie.port" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>代表一个端口或一组端口(例如 '80' 或 '80,8080')的字符串,或为 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.path">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">path</code><a class="headerlink" href="#http.cookiejar.Cookie.path" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>Cookie 路径 (字符串类型,例如 <code class="docutils literal notranslate"><span class="pre">'/acme/rocket_launchers'</span></code>)。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.secure">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">secure</code><a class="headerlink" href="#http.cookiejar.Cookie.secure" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 cookie 应当只能通过安全连接返回则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.expires">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">expires</code><a class="headerlink" href="#http.cookiejar.Cookie.expires" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>整数类型的过期时间,以距离 Unix 纪元的秒数表示,或者为 <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>。 另请参阅 <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> 方法。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.discard">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">discard</code><a class="headerlink" href="#http.cookiejar.Cookie.discard" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果是会话 cookie 则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.comment">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">comment</code><a class="headerlink" href="#http.cookiejar.Cookie.comment" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>来自服务器的解释此 cookie 功能的字符串形式的注释,或者为 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.comment_url">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">comment_url</code><a class="headerlink" href="#http.cookiejar.Cookie.comment_url" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>链接到来自服务器的解释此 cookie 功能的注释的 URL,或者为 <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>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.rfc2109">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">rfc2109</code><a class="headerlink" href="#http.cookiejar.Cookie.rfc2109" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 cookie 是作为 <span class="target" id="index-76"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> cookie 被接收(即该 cookie 是在 <em class="mailheader">Set-Cookie</em> 标头中送达,且该标头的 Version cookie 属性的值为 1)则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。 之所以要提供该属性是因为 <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> 可能会从 RFC 2109 cookies '降级' 为 Netscape cookie,在此情况下 <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。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.port_specified">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">port_specified</code><a class="headerlink" href="#http.cookiejar.Cookie.port_specified" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果服务器显式地指定了一个端口或一组端口(在 <em class="mailheader">Set-Cookie</em> / <em class="mailheader">Set-Cookie2</em> 标头中)则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.domain_specified">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">domain_specified</code><a class="headerlink" href="#http.cookiejar.Cookie.domain_specified" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果服务器显式地指定了一个域则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="attribute">
|
||
<dt id="http.cookiejar.Cookie.domain_initial_dot">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">domain_initial_dot</code><a class="headerlink" href="#http.cookiejar.Cookie.domain_initial_dot" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>该属性为 <code class="docutils literal notranslate"><span class="pre">True</span></code> 表示服务器显式地指定了以一个点号 (<code class="docutils literal notranslate"><span class="pre">'.'</span></code>) 打头的域。</p>
|
||
</dd></dl>
|
||
|
||
<p>Cookie 可能还有额外的非标准 cookie 属性。 这些属性可以通过下列方法来访问:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.Cookie.has_nonstandard_attr">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">has_nonstandard_attr</code><span class="sig-paren">(</span><em class="sig-param">name</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.has_nonstandard_attr" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 cookie 具有相应名称的 cookie 属性则返回 <code class="docutils literal notranslate"><span class="pre">True</span></code>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.Cookie.get_nonstandard_attr">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">get_nonstandard_attr</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.get_nonstandard_attr" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 cookie 具有相应名称的 cookie 属性,则返回其值。 否则,返回 <em>default</em>。</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.Cookie.set_nonstandard_attr">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">set_nonstandard_attr</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">value</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.set_nonstandard_attr" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>设置指定名称的 cookie 属性的值。</p>
|
||
</dd></dl>
|
||
|
||
<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> 类还定义了下列方法:</p>
|
||
<dl class="method">
|
||
<dt id="http.cookiejar.Cookie.is_expired">
|
||
<code class="sig-prename descclassname">Cookie.</code><code class="sig-name descname">is_expired</code><span class="sig-paren">(</span><em class="sig-param">now=None</em><span class="sig-paren">)</span><a class="headerlink" href="#http.cookiejar.Cookie.is_expired" title="永久链接至目标">¶</a></dt>
|
||
<dd><p>如果 cookie 传入了服务器请求其所应过期的时间则为 <code class="docutils literal notranslate"><span class="pre">True</span></code>。 如果给出 <em>now</em> 值(距离 Unix 纪元的秒数),则返回在指定的时间 cookie 是否已过期。</p>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="examples">
|
||
<h2>例子<a class="headerlink" href="#examples" title="永久链接至标题">¶</a></h2>
|
||
<p>第一个例子显示了 <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>
|
||
<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>
|
||
<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>
|
||
<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>
|
||
<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">"http://example.com/"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>这个例子演示了如何使用你的 Netscape, Mozilla 或 Lynx cookie 打开一个 URL (假定 cookie 文件位置采用 Unix/Netscape 惯例):</p>
|
||
<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>
|
||
<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>
|
||
<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">"~"</span><span class="p">),</span> <span class="s2">".netscape"</span><span class="p">,</span> <span class="s2">"cookies.txt"</span><span class="p">))</span>
|
||
<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>
|
||
<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">"http://example.com/"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<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> 的使用。 启用 <span class="target" id="index-77"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2965.html"><strong>RFC 2965</strong></a> cookie,在设置和返回 Netscape cookie 时更严格地限制域,以及阻止某些域设置 cookie 或返回它们:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">urllib.request</span>
|
||
<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>
|
||
<span class="n">policy</span> <span class="o">=</span> <span class="n">DefaultCookiePolicy</span><span class="p">(</span>
|
||
<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>
|
||
<span class="n">blocked_domains</span><span class="o">=</span><span class="p">[</span><span class="s2">"ads.net"</span><span class="p">,</span> <span class="s2">".ads.net"</span><span class="p">])</span>
|
||
<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>
|
||
<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>
|
||
<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">"http://example.com/"</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||
<div class="sphinxsidebarwrapper">
|
||
<h3><a href="../contents.html">目录</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookiejar</span></code> —— HTTP 客户端的 Cookie 处理</a><ul>
|
||
<li><a class="reference internal" href="#cookiejar-and-filecookiejar-objects">CookieJar 和 FileCookieJar 对象</a></li>
|
||
<li><a class="reference internal" href="#filecookiejar-subclasses-and-co-operation-with-web-browsers">FileCookieJar 的子类及其与 Web 浏览器的协同</a></li>
|
||
<li><a class="reference internal" href="#cookiepolicy-objects">CookiePolicy 对象</a></li>
|
||
<li><a class="reference internal" href="#defaultcookiepolicy-objects">DefaultCookiePolicy 对象</a></li>
|
||
<li><a class="reference internal" href="#cookie-objects">Cookie 对象</a></li>
|
||
<li><a class="reference internal" href="#examples">例子</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4>上一个主题</h4>
|
||
<p class="topless"><a href="http.cookies.html"
|
||
title="上一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">http.cookies</span></code> --- HTTP状态管理</a></p>
|
||
<h4>下一个主题</h4>
|
||
<p class="topless"><a href="xmlrpc.html"
|
||
title="下一章"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc</span></code> --- XMLRPC 服务端与客户端模块</a></p>
|
||
<div role="note" aria-label="source link">
|
||
<h3>本页</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">报告 Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/3.8/Doc/library/http.cookiejar.rst"
|
||
rel="nofollow">显示源代码
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="related navigation">
|
||
<h3>导航</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="总目录"
|
||
>索引</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python 模块索引"
|
||
>模块</a> |</li>
|
||
<li class="right" >
|
||
<a href="xmlrpc.html" title="xmlrpc --- XMLRPC 服务端与客户端模块"
|
||
>下一页</a> |</li>
|
||
<li class="right" >
|
||
<a href="http.cookies.html" title="http.cookies --- HTTP状态管理"
|
||
>上一页</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.8.20 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python 标准库</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="internet.html" >互联网协议和支持</a> »</li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="快速搜索" aria-label="快速搜索" type="text" name="q" />
|
||
<input type="submit" value="转向" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
© <a href="../copyright.html">版权所有</a> 2001-2024, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
|
||
最后更新于 12月 09, 2024.
|
||
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.4.4.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |