uTools-Manuals/docs/python/http.cookies.html

48 lines
31 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="module-http.cookies"><h1><span class="yiyi-st" id="yiyi-10">21.23. <a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal"><span class="pre">http.cookies</span></code></a> - HTTP状态管理</span></h1><p><span class="yiyi-st" id="yiyi-11"><strong>源代码:</strong> <a class="reference external" href="https://hg.python.org/cpython/file/3.5/Lib/http/cookies.py">Lib / http / cookies.py</a></span></p><p><span class="yiyi-st" id="yiyi-12"><a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal"><span class="pre">http.cookies</span></code></a>模块定义用于抽象cookie概念的类即HTTP状态管理机制。</span><span class="yiyi-st" id="yiyi-13">它支持简单的仅字符串的cookie并提供一个抽象使任何可序列化的数据类型作为cookie值。</span></p><p><span class="yiyi-st" id="yiyi-14">该模块以前严格地应用在<span class="target" id="index-0"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a><span class="target" id="index-1"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2068.html"><strong>RFC 2068</strong></a>规范中描述的解析规则。</span><span class="yiyi-st" id="yiyi-15">后来发现MSIE 3.0x不遵循这些规范中列出的字符规则并且很多当前的浏览器和服务器在处理Cookie时放宽了解析规则。</span><span class="yiyi-st" id="yiyi-16">因此,使用的解析规则有点不太严格。</span></p><p><span class="yiyi-st" id="yiyi-17">字符集<a class="reference internal" href="string.html#string.ascii_letters" title="string.ascii_letters"><code class="xref py py-data docutils literal"><span class="pre">string.ascii_letters</span></code></a><a class="reference internal" href="string.html#string.digits" title="string.digits"><code class="xref py py-data docutils literal"><span class="pre">string.digits</span></code></a><code class="docutils literal"><span class="pre">!#$%&amp;'*+-.^_`|~:</span></code>表示此模块在Cookie名称中允许的有效字符集<a class="reference internal" href="#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal"><span class="pre">key</span></code></a>)。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-18"><span class="versionmodified">在版本3.3中已更改:</span>允许“”作为有效的Cookie名称字符。</span></p></div><div class="admonition note"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-19">注意</span></p><p class="last"><span class="yiyi-st" id="yiyi-20">遇到无效的Cookie时会出现<a class="reference internal" href="#http.cookies.CookieError" title="http.cookies.CookieError"><code class="xref py py-exc docutils literal"><span class="pre">CookieError</span></code></a>因此如果您的Cookie数据来自浏览器则应该始终准备无效的数据并在解析时捕获<a class="reference internal" href="#http.cookies.CookieError" title="http.cookies.CookieError"><code class="xref py py-exc docutils literal"><span class="pre">CookieError</span></code></a></span></p></div><dl class="exception"><dt id="http.cookies.CookieError"><span class="yiyi-st" id="yiyi-21"> <em class="property">exception </em><code class="descclassname">http.cookies.</code><code class="descname">CookieError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-22">由于<span class="target" id="index-2"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a>无效:不正确的属性,不正确的<em class="mailheader">Set-Cookie</em>标题等而导致异常失败</span></p></dd></dl><dl class="class"><dt id="http.cookies.BaseCookie"><span class="yiyi-st" id="yiyi-23"> <em class="property">class </em><code class="descclassname">http.cookies.</code><code class="descname">BaseCookie</code><span class="sig-paren">(</span><span class="optional">[</span><em>input</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-24">此类是类字典对象,其键是字符串,其值为<a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal"><span class="pre">Morsel</span></code></a>实例。</span><span class="yiyi-st" id="yiyi-25">请注意,将键设置为值时,首先将该值转换为包含键和值的<a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal"><span class="pre">Morsel</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-26">如果给定<em>输入</em>,则将其传递到<a class="reference internal" href="#http.cookies.BaseCookie.load" title="http.cookies.BaseCookie.load"><code class="xref py py-meth docutils literal"><span class="pre">load()</span></code></a>方法。</span></p></dd></dl><dl class="class"><dt id="http.cookies.SimpleCookie"><span class="yiyi-st" id="yiyi-27"> <em class="property">class </em><code class="descclassname">http.cookies.</code><code class="descname">SimpleCookie</code><span class="sig-paren">(</span><span class="optional">[</span><em>input</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-28">此类派生自<a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal"><span class="pre">BaseCookie</span></code></a>,并覆盖<code class="xref py py-meth docutils literal"><span class="pre">value_decode()</span></code><code class="xref py py-meth docutils literal"><span class="pre">value_encode()</span></code>为标识,<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-func docutils literal"><span class="pre">str()</span></code></a>分别。</span></p></dd></dl><div class="admonition seealso"><p class="first admonition-title"><span class="yiyi-st" id="yiyi-29">也可以看看</span></p><dl class="last docutils"><dt><span class="yiyi-st" id="yiyi-30">模块<a class="reference internal" href="http.cookiejar.html#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal"><span class="pre">http.cookiejar</span></code></a></span></dt><dd><span class="yiyi-st" id="yiyi-31">web <em>客户端的HTTP cookie处理</em></span><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="http.cookiejar.html#module-http.cookiejar" title="http.cookiejar: Classes for automatic handling of HTTP cookies."><code class="xref py py-mod docutils literal"><span class="pre">http.cookiejar</span></code></a><a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal"><span class="pre">http.cookies</span></code></a>模块不依赖于彼此。</span></dd><dt><span class="yiyi-st" id="yiyi-33"><span class="target" id="index-3"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a> - HTTP状态管理机制</span></dt><dd><span class="yiyi-st" id="yiyi-34">这是由该模块实现的状态管理规范。</span></dd></dl></div><div class="section" id="cookie-objects"><h2><span class="yiyi-st" id="yiyi-35">21.23.1. </span><span class="yiyi-st" id="yiyi-36">Cookie对象</span></h2><dl class="method"><dt id="http.cookies.BaseCookie.value_decode"><span class="yiyi-st" id="yiyi-37"> <code class="descclassname">BaseCookie.</code><code class="descname">value_decode</code><span class="sig-paren">(</span><em>val</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-38">从字符串表示返回解码值。</span><span class="yiyi-st" id="yiyi-39">返回值可以是任何类型。</span><span class="yiyi-st" id="yiyi-40">此方法在<a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal"><span class="pre">BaseCookie</span></code></a>中不执行任何操作 - 它存在,因此可以覆盖。</span></p></dd></dl><dl class="method"><dt id="http.cookies.BaseCookie.value_encode"><span class="yiyi-st" id="yiyi-41"> <code class="descclassname">BaseCookie.</code><code class="descname">value_encode</code><span class="sig-paren">(</span><em>val</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-42">返回编码值。</span><span class="yiyi-st" id="yiyi-43"><em>val</em>可以是任何类型,但返回值必须是字符串。</span><span class="yiyi-st" id="yiyi-44">此方法在<a class="reference internal" href="#http.cookies.BaseCookie" title="http.cookies.BaseCookie"><code class="xref py py-class docutils literal"><span class="pre">BaseCookie</span></code></a>中不执行任何操作 - 它存在,因此可以覆盖。</span></p><p><span class="yiyi-st" id="yiyi-45">一般来说,应该是<a class="reference internal" href="#http.cookies.BaseCookie.value_encode" title="http.cookies.BaseCookie.value_encode"><code class="xref py py-meth docutils literal"><span class="pre">value_encode()</span></code></a><a class="reference internal" href="#http.cookies.BaseCookie.value_decode" title="http.cookies.BaseCookie.value_decode"><code class="xref py py-meth docutils literal"><span class="pre">value_decode()</span></code></a><em>value_decode</em>范围内的反转。</span></p></dd></dl><dl class="method"><dt id="http.cookies.BaseCookie.output"><span class="yiyi-st" id="yiyi-46"> <code class="descclassname">BaseCookie.</code><code class="descname">output</code><span class="sig-paren">(</span><em>attrs=None</em>, <em>header='Set-Cookie:'</em>, <em>sep='\r\n'</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-47">返回适合作为HTTP头发送的字符串表示。</span><span class="yiyi-st" id="yiyi-48"><em>attrs</em><em></em>被发送到每个<a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal"><span class="pre">Morsel</span></code></a><a class="reference internal" href="#http.cookies.BaseCookie.output" title="http.cookies.BaseCookie.output"><code class="xref py py-meth docutils literal"><span class="pre">output()</span></code></a>方法。</span><span class="yiyi-st" id="yiyi-49"><em>sep</em>用于将标头连接在一起,默认情况下是组合<code class="docutils literal"><span class="pre">'\r\n'</span></code>CRLF</span></p></dd></dl><dl class="method"><dt id="http.cookies.BaseCookie.js_output"><span class="yiyi-st" id="yiyi-50"> <code class="descclassname">BaseCookie.</code><code class="descname">js_output</code><span class="sig-paren">(</span><em>attrs=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-51">返回一个可嵌入的JavaScript代码段如果在支持JavaScript的浏览器上运行则会如同发送HTTP标头一样运行。</span></p><p><span class="yiyi-st" id="yiyi-52"><em>attrs</em>的含义与<a class="reference internal" href="#http.cookies.BaseCookie.output" title="http.cookies.BaseCookie.output"><code class="xref py py-meth docutils literal"><span class="pre">output()</span></code></a>中的含义相同。</span></p></dd></dl><dl class="method"><dt id="http.cookies.BaseCookie.load"><span class="yiyi-st" id="yiyi-53"> <code class="descclassname">BaseCookie.</code><code class="descname">load</code><span class="sig-paren">(</span><em>rawdata</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-54">如果<em>rawdata</em>是字符串,请将其解析为<code class="docutils literal"><span class="pre">HTTP_COOKIE</span></code>,并添加在<a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal"><span class="pre">Morsel</span></code></a>中找到的值。如果它是一个字典,它等效于:</span></p><pre><code class="language-python"><span></span><span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">rawdata</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">cookie</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
</code></pre></dd></dl></div><div class="section" id="morsel-objects"><h2><span class="yiyi-st" id="yiyi-55">21.23.2. </span><span class="yiyi-st" id="yiyi-56">Morsel对象</span></h2><dl class="class"><dt id="http.cookies.Morsel"><span class="yiyi-st" id="yiyi-57"> <em class="property">class </em><code class="descclassname">http.cookies.</code><code class="descname">Morsel</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-58">抽象一个键/值对,它有一些<span class="target" id="index-4"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a>属性。</span></p><p><span class="yiyi-st" id="yiyi-59">Morsels是类似字典的对象其键集是常量 - 有效的<span class="target" id="index-5"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a>属性,</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-60"><code class="docutils literal"><span class="pre">expires</span></code></span></li><li><span class="yiyi-st" id="yiyi-61"><code class="docutils literal"><span class="pre">path</span></code></span></li><li><span class="yiyi-st" id="yiyi-62"><code class="docutils literal"><span class="pre">comment</span></code></span></li><li><span class="yiyi-st" id="yiyi-63"><code class="docutils literal"><span class="pre">domain</span></code></span></li><li><span class="yiyi-st" id="yiyi-64"><code class="docutils literal"><span class="pre">max-age</span></code></span></li><li><span class="yiyi-st" id="yiyi-65"><code class="docutils literal"><span class="pre">secure</span></code></span></li><li><span class="yiyi-st" id="yiyi-66"><code class="docutils literal"><span class="pre">version</span></code></span></li><li><span class="yiyi-st" id="yiyi-67"><code class="docutils literal"><span class="pre">httponly</span></code></span></li></ul><p><span class="yiyi-st" id="yiyi-68">属性<code class="xref py py-attr docutils literal"><span class="pre">httponly</span></code>指定Cookie仅在HTTP请求中传输不能通过JavaScript访问。</span><span class="yiyi-st" id="yiyi-69">这旨在减轻某些形式的跨站点脚本。</span></p><p><span class="yiyi-st" id="yiyi-70">键是不区分大小写的,其默认值为<code class="docutils literal"><span class="pre">''</span></code></span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-71"><span class="versionmodified">在版本3.5中更改:</span> <code class="xref py py-meth docutils literal"><span class="pre">__eq__()</span></code>现在将<a class="reference internal" href="#http.cookies.Morsel.key" title="http.cookies.Morsel.key"><code class="xref py py-attr docutils literal"><span class="pre">key</span></code></a><a class="reference internal" href="#http.cookies.Morsel.value" title="http.cookies.Morsel.value"><code class="xref py py-attr docutils literal"><span class="pre">value</span></code></a>纳入考虑。</span></p></div></dd></dl><dl class="attribute"><dt id="http.cookies.Morsel.value"><span class="yiyi-st" id="yiyi-72"> <code class="descclassname">Morsel.</code><code class="descname">value</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-73">Cookie的值。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-74"><span class="versionmodified">自版本3.5起已弃用:</span>指定为<code class="docutils literal"><span class="pre">value</span></code>;请改用<a class="reference internal" href="#http.cookies.Morsel.set" title="http.cookies.Morsel.set"><code class="xref py py-meth docutils literal"><span class="pre">set()</span></code></a></span></p></div></dd></dl><dl class="attribute"><dt id="http.cookies.Morsel.coded_value"><span class="yiyi-st" id="yiyi-75"> <code class="descclassname">Morsel.</code><code class="descname">coded_value</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-76">Cookie的编码值 - 这是应该发送的内容。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-77"><span class="versionmodified">自版本3.5之后已弃用:</span>分配到<code class="docutils literal"><span class="pre">coded_value</span></code>;请改用<a class="reference internal" href="#http.cookies.Morsel.set" title="http.cookies.Morsel.set"><code class="xref py py-meth docutils literal"><span class="pre">set()</span></code></a></span></p></div></dd></dl><dl class="attribute"><dt id="http.cookies.Morsel.key"><span class="yiyi-st" id="yiyi-78"> <code class="descclassname">Morsel.</code><code class="descname">key</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-79">Cookie的名称。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-80"><span class="versionmodified">自版本3.5之后已弃用:</span>分配到<code class="docutils literal"><span class="pre">key</span></code>;请改用<a class="reference internal" href="#http.cookies.Morsel.set" title="http.cookies.Morsel.set"><code class="xref py py-meth docutils literal"><span class="pre">set()</span></code></a></span></p></div></dd></dl><dl class="method"><dt id="http.cookies.Morsel.set"><span class="yiyi-st" id="yiyi-81"> <code class="descclassname">Morsel.</code><code class="descname">set</code><span class="sig-paren">(</span><em>key</em>, <em>value</em>, <em>coded_value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-82">设置<em></em><em></em><em>coded_value</em>属性。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-83"><span class="versionmodified">自版本3.5后已弃用:</span>未记录的<em>LegalChars</em>参数将被忽略,并将在以后的版本中删除。</span></p></div></dd></dl><dl class="method"><dt id="http.cookies.Morsel.isReservedKey"><span class="yiyi-st" id="yiyi-84"> <code class="descclassname">Morsel.</code><code class="descname">isReservedKey</code><span class="sig-paren">(</span><em>K</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-85">是否<em>K</em><a class="reference internal" href="#http.cookies.Morsel" title="http.cookies.Morsel"><code class="xref py py-class docutils literal"><span class="pre">Morsel</span></code></a>的键集合的成员。</span></p></dd></dl><dl class="method"><dt id="http.cookies.Morsel.output"><span class="yiyi-st" id="yiyi-86"> <code class="descclassname">Morsel.</code><code class="descname">output</code><span class="sig-paren">(</span><em>attrs=None</em>, <em>header='Set-Cookie:'</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-87">返回Morsel的字符串表示形式适合作为HTTP标头发送。</span><span class="yiyi-st" id="yiyi-88">默认情况下,包括所有属性,除非给出<em>attrs</em>,在这种情况下,它应该是要使用的属性列表。</span><span class="yiyi-st" id="yiyi-89"><em>标题</em>默认为<code class="docutils literal"><span class="pre">"Set-Cookie:"</span></code></span></p></dd></dl><dl class="method"><dt id="http.cookies.Morsel.js_output"><span class="yiyi-st" id="yiyi-90"> <code class="descclassname">Morsel.</code><code class="descname">js_output</code><span class="sig-paren">(</span><em>attrs=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-91">返回一个可嵌入的JavaScript代码段如果在支持JavaScript的浏览器上运行则会如同发送HTTP标头一样运行。</span></p><p><span class="yiyi-st" id="yiyi-92"><em>attrs</em>的含义与<a class="reference internal" href="#http.cookies.Morsel.output" title="http.cookies.Morsel.output"><code class="xref py py-meth docutils literal"><span class="pre">output()</span></code></a>中的含义相同。</span></p></dd></dl><dl class="method"><dt id="http.cookies.Morsel.OutputString"><span class="yiyi-st" id="yiyi-93"> <code class="descclassname">Morsel.</code><code class="descname">OutputString</code><span class="sig-paren">(</span><em>attrs=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-94">返回一个表示Morsel的字符串没有任何周围的HTTP或JavaScript。</span></p><p><span class="yiyi-st" id="yiyi-95"><em>attrs</em>的含义与<a class="reference internal" href="#http.cookies.Morsel.output" title="http.cookies.Morsel.output"><code class="xref py py-meth docutils literal"><span class="pre">output()</span></code></a>中的含义相同。</span></p></dd></dl><dl class="method"><dt id="http.cookies.Morsel.update"><span class="yiyi-st" id="yiyi-96"> <code class="descclassname">Morsel.</code><code class="descname">update</code><span class="sig-paren">(</span><em>values</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-97">使用字典中的值<em></em>更新Morsel字典中的值。</span><span class="yiyi-st" id="yiyi-98">如果<em></em> dict中的任何键不是有效的<span class="target" id="index-6"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a>属性,则引发错误。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-99"><span class="versionmodified">在3.5版本中更改:</span>无效键出现错误。</span></p></div></dd></dl><dl class="method"><dt id="http.cookies.Morsel.copy"><span class="yiyi-st" id="yiyi-100"> <code class="descclassname">Morsel.</code><code class="descname">copy</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-101">返回Morsel对象的浅副本。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-102"><span class="versionmodified">在版本3.5中更改:</span>返回Morsel对象而不是dict。</span></p></div></dd></dl><dl class="method"><dt id="http.cookies.Morsel.setdefault"><span class="yiyi-st" id="yiyi-103"> <code class="descclassname">Morsel.</code><code class="descname">setdefault</code><span class="sig-paren">(</span><em>key</em>, <em>value=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-104">如果密钥不是有效的<span class="target" id="index-7"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2109.html"><strong>RFC 2109</strong></a>属性,则引发错误,否则与<a class="reference internal" href="stdtypes.html#dict.setdefault" title="dict.setdefault"><code class="xref py py-meth docutils literal"><span class="pre">dict.setdefault()</span></code></a>相同。</span></p></dd></dl></div><div class="section" id="example"><h2><span class="yiyi-st" id="yiyi-105">21.23.3. </span><span class="yiyi-st" id="yiyi-106">示例</span></h2><p><span class="yiyi-st" id="yiyi-107">以下示例演示如何使用<a class="reference internal" href="#module-http.cookies" title="http.cookies: Support for HTTP state management (cookies)."><code class="xref py py-mod docutils literal"><span class="pre">http.cookies</span></code></a>模块。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">http</span> <span class="k">import</span> <span class="n">cookies</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"fig"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"newton"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"sugar"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"wafer"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span> <span class="c1"># generate HTTP headers</span>
<span class="go">Set-Cookie: fig=newton</span>
<span class="go">Set-Cookie: sugar=wafer</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">())</span> <span class="c1"># same thing</span>
<span class="go">Set-Cookie: fig=newton</span>
<span class="go">Set-Cookie: sugar=wafer</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"rocky"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"road"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"rocky"</span><span class="p">][</span><span class="s2">"path"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"/cookie"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">header</span><span class="o">=</span><span class="s2">"Cookie:"</span><span class="p">))</span>
<span class="go">Cookie: rocky=road; Path=/cookie</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">attrs</span><span class="o">=</span><span class="p">[],</span> <span class="n">header</span><span class="o">=</span><span class="s2">"Cookie:"</span><span class="p">))</span>
<span class="go">Cookie: rocky=road</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"chips=ahoy; vienna=finger"</span><span class="p">)</span> <span class="c1"># load from a string (HTTP header)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: chips=ahoy</span>
<span class="go">Set-Cookie: vienna=finger</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s1">'keebler="E=everybody; L=</span><span class="se">\\</span><span class="s1">"Loves</span><span class="se">\\</span><span class="s1">"; fudge=</span><span class="se">\\</span><span class="s1">012;";'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"oreo"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"doublestuff"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"oreo"</span><span class="p">][</span><span class="s2">"path"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"/"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: oreo=doublestuff; Path=/</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"twix"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"none for you"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"twix"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">'none for you'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span> <span class="o">=</span> <span class="n">cookies</span><span class="o">.</span><span class="n">SimpleCookie</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"number"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">7</span> <span class="c1"># equivalent to C["number"] = str(7)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"string"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"seven"</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"number"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">'7'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">C</span><span class="p">[</span><span class="s2">"string"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span>
<span class="go">'seven'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">C</span><span class="p">)</span>
<span class="go">Set-Cookie: number=7</span>
<span class="go">Set-Cookie: string=seven</span>
</code></pre></div></div></div>