uTools-Manuals/docs/python/nntplib.html
2019-04-21 11:50:48 +08:00

81 lines
60 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-nntplib"><h1><span class="yiyi-st" id="yiyi-10">21.16. <a class="reference internal" href="#module-nntplib" title="nntplib: NNTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal"><span class="pre">nntplib</span></code></a> - NNTP协议客户端</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/nntplib.py">Lib / nntplib.py</a></span></p><p><span class="yiyi-st" id="yiyi-12">此模块定义实现网络新闻传输协议的客户端侧的<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>类。</span><span class="yiyi-st" id="yiyi-13">它可以用于实现新闻阅读器或海报,或自动新闻处理器。</span><span class="yiyi-st" id="yiyi-14">It is compatible with <span class="target" id="index-1"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc3977.html"><strong>RFC 3977</strong></a> as well as the older <span class="target" id="index-2"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc977.html"><strong>RFC 977</strong></a> and <span class="target" id="index-3"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2980.html"><strong>RFC 2980</strong></a>.</span></p><p><span class="yiyi-st" id="yiyi-15">这里有两个小例子,说明如何使用它。</span><span class="yiyi-st" id="yiyi-16">列出一些关于新闻组的统计数据并打印最后10篇文章的主题</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">nntplib</span><span class="o">.</span><span class="n">NNTP</span><span class="p">(</span><span class="s1">'news.gmane.org'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">last</span><span class="p">,</span> <span class="n">name</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s1">'gmane.comp.python.committers'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="s1">'Group'</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="s1">'has'</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="s1">'articles, range'</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="s1">'to'</span><span class="p">,</span> <span class="n">last</span><span class="p">)</span>
<span class="go">Group gmane.comp.python.committers has 1096 articles, range 1 to 1096</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">overviews</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">over</span><span class="p">((</span><span class="n">last</span> <span class="o">-</span> <span class="mi">9</span><span class="p">,</span> <span class="n">last</span><span class="p">))</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="nb">id</span><span class="p">,</span> <span class="n">over</span> <span class="ow">in</span> <span class="n">overviews</span><span class="p">:</span>
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">nntplib</span><span class="o">.</span><span class="n">decode_header</span><span class="p">(</span><span class="n">over</span><span class="p">[</span><span class="s1">'subject'</span><span class="p">]))</span>
<span class="gp">...</span>
<span class="go">1087 Re: Commit privileges for Łukasz Langa</span>
<span class="go">1088 Re: 3.2 alpha 2 freeze</span>
<span class="go">1089 Re: 3.2 alpha 2 freeze</span>
<span class="go">1090 Re: Commit privileges for Łukasz Langa</span>
<span class="go">1091 Re: Commit privileges for Łukasz Langa</span>
<span class="go">1092 Updated ssh key</span>
<span class="go">1093 Re: Updated ssh key</span>
<span class="go">1094 Re: Updated ssh key</span>
<span class="go">1095 Hello fellow committers!</span>
<span class="go">1096 Re: Hello fellow committers!</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
<span class="go">'205 Bye!'</span>
</code></pre><p><span class="yiyi-st" id="yiyi-17">要从二进制文件发布文章(假设文章具有有效的标题,并且您有权在特定新闻组上发帖):</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">nntplib</span><span class="o">.</span><span class="n">NNTP</span><span class="p">(</span><span class="s1">'news.gmane.org'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'article.txt'</span><span class="p">,</span> <span class="s1">'rb'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="go">'240 Article posted successfully.'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">s</span><span class="o">.</span><span class="n">quit</span><span class="p">()</span>
<span class="go">'205 Bye!'</span>
</code></pre><p><span class="yiyi-st" id="yiyi-18">模块本身定义了以下类:</span></p><dl class="class"><dt id="nntplib.NNTP"><span class="yiyi-st" id="yiyi-19"> <em class="property">class </em><code class="descclassname">nntplib.</code><code class="descname">NNTP</code><span class="sig-paren">(</span><em>host</em>, <em>port=119</em>, <em>user=None</em>, <em>password=None</em>, <em>readermode=None</em>, <em>usenetrc=False</em><span class="optional">[</span>, <em>timeout</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-20">返回一个新的<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>对象,表示与在主机<em>主机</em>上运行的NNTP服务器的连接在端口<em>端口</em>处侦听。</span><span class="yiyi-st" id="yiyi-21">可以为套接字连接指定可选的<em>超时</em></span><span class="yiyi-st" id="yiyi-22">如果提供了可选的<em>用户</em><em>密码 t&gt;,或<code class="file docutils literal"><span class="pre">/.netrc</span></code>和可选标志<em>usenetrc 为真,<code class="docutils literal"><span class="pre">AUTHINFO</span> <span class="pre">USER</span></code><code class="docutils literal"><span class="pre">AUTHINFO</span> <span class="pre">PASS</span> / t8&gt;命令用于标识和验证服务器的用户。</code></em></em></span><span class="yiyi-st" id="yiyi-23">如果可选标志<em>readermode</em>为真,则在执行认证之前发送<code class="docutils literal"><span class="pre">模式</span> <span class="pre">读取器</span> </code></span><span class="yiyi-st" id="yiyi-24">如果要连接到本地计算机上的NNTP服务器并打算调用读取程序特定的命令例如<code class="docutils literal"><span class="pre">group</span></code>),有时需要使用读取模式。</span><span class="yiyi-st" id="yiyi-25">如果遇到意外的<a class="reference internal" href="#nntplib.NNTPPermanentError" title="nntplib.NNTPPermanentError"><code class="xref py py-exc docutils literal"><span class="pre">NNTPPermanentError</span></code></a>,您可能需要设置<em>readermode</em></span><span class="yiyi-st" id="yiyi-26"><a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>类支持<a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal"><span class="pre">with</span></code></a>语句无条件地使用<a class="reference internal" href="exceptions.html#OSError" title="OSError"><code class="xref py py-exc docutils literal"><span class="pre">OSError</span></code></a>异常并在完成后关闭NNTP连接。</span><span class="yiyi-st" id="yiyi-27"></span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">nntplib</span> <span class="k">import</span> <span class="n">NNTP</span>
<span class="gp">&gt;&gt;&gt; </span><span class="k">with</span> <span class="n">NNTP</span><span class="p">(</span><span class="s1">'news.gmane.org'</span><span class="p">)</span> <span class="k">as</span> <span class="n">n</span><span class="p">:</span>
<span class="gp">... </span> <span class="n">n</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s1">'gmane.comp.python.committers'</span><span class="p">)</span>
<span class="gp">... </span>
<span class="go">('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers')</span>
<span class="go">&gt;&gt;&gt;</span>
</code></pre><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-28"><span class="versionmodified">在版本3.2中更改:</span> <em>usenetrc</em>现在为<code class="docutils literal"><span class="pre">False</span></code></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-29"><span class="versionmodified">在版本3.3中已更改:</span>添加了对<a class="reference internal" href="../reference/compound_stmts.html#with"><code class="xref std std-keyword docutils literal"><span class="pre">with</span></code></a>语句的支持。</span></p></div></dd></dl><dl class="class"><dt id="nntplib.NNTP_SSL"><span class="yiyi-st" id="yiyi-30"> <em class="property">class </em><code class="descclassname">nntplib.</code><code class="descname">NNTP_SSL</code><span class="sig-paren">(</span><em>host</em>, <em>port=563</em>, <em>user=None</em>, <em>password=None</em>, <em>ssl_context=None</em>, <em>readermode=None</em>, <em>usenetrc=False</em><span class="optional">[</span>, <em>timeout</em><span class="optional">]</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-31">返回一个新的<a class="reference internal" href="#nntplib.NNTP_SSL" title="nntplib.NNTP_SSL"><code class="xref py py-class docutils literal"><span class="pre">NNTP_SSL</span></code></a>对象,表示与在主机<em>主机</em>上运行的NNTP服务器的加密连接在端口<em>端口</em>处侦听。</span><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="#nntplib.NNTP_SSL" title="nntplib.NNTP_SSL"><code class="xref py py-class docutils literal"><span class="pre">NNTP_SSL</span></code></a>对象具有与<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>对象相同的方法。</span><span class="yiyi-st" id="yiyi-33">如果省略<em>端口</em>则使用端口563NNTPS</span><span class="yiyi-st" id="yiyi-34"><em>ssl_context</em>也是可选的,并且是<a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal"><span class="pre">SSLContext</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-35">有关最佳做法,请参阅<a class="reference internal" href="ssl.html#ssl-security"><span>Security considerations</span></a></span><span class="yiyi-st" id="yiyi-36">所有其他参数的行为与<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>相同。</span></p><p><span class="yiyi-st" id="yiyi-37">注意对于如下所述的STARTTLS<span class="target" id="index-4"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc4642.html"><strong>RFC 4642</strong></a>不建议使用SSL-on-563。</span><span class="yiyi-st" id="yiyi-38">但是,一些服务器只支持前者。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-39"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-40"><span class="versionmodified">在版本3.4中更改:</span>此类现在支持使用<a class="reference internal" href="ssl.html#ssl.SSLContext.check_hostname" title="ssl.SSLContext.check_hostname"><code class="xref py py-attr docutils literal"><span class="pre">ssl.SSLContext.check_hostname</span></code></a><em>服务器名称指示</em>(请参阅<a class="reference internal" href="ssl.html#ssl.HAS_SNI" title="ssl.HAS_SNI"><code class="xref py py-data docutils literal"><span class="pre">ssl.HAS_SNI</span></code></a>)。</span></p></div></dd></dl><dl class="exception"><dt id="nntplib.NNTPError"><span class="yiyi-st" id="yiyi-41"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-42">派生自标准异常<a class="reference internal" href="exceptions.html#Exception" title="Exception"><code class="xref py py-exc docutils literal"><span class="pre">Exception</span></code></a>,这是由<a class="reference internal" href="#module-nntplib" title="nntplib: NNTP protocol client (requires sockets)."><code class="xref py py-mod docutils literal"><span class="pre">nntplib</span></code></a>模块引发的所有异常的基类。</span><span class="yiyi-st" id="yiyi-43">此类的实例具有以下属性:</span></p><dl class="attribute"><dt id="nntplib.NNTPError.response"><span class="yiyi-st" id="yiyi-44"> <code class="descname">response</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-45">服务器的响应(如果可用)作为<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>对象。</span></p></dd></dl></dd></dl><dl class="exception"><dt id="nntplib.NNTPReplyError"><span class="yiyi-st" id="yiyi-46"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPReplyError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-47">从服务器收到意外的响应时引发异常。</span></p></dd></dl><dl class="exception"><dt id="nntplib.NNTPTemporaryError"><span class="yiyi-st" id="yiyi-48"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPTemporaryError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-49">接收范围为400-499的响应代码时引发异常。</span></p></dd></dl><dl class="exception"><dt id="nntplib.NNTPPermanentError"><span class="yiyi-st" id="yiyi-50"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPPermanentError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-51">当接收到范围500-599中的响应代码时引发异常。</span></p></dd></dl><dl class="exception"><dt id="nntplib.NNTPProtocolError"><span class="yiyi-st" id="yiyi-52"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPProtocolError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-53">当从服务器接收到的回复不是以1-5范围内的数字开头时引发的异常。</span></p></dd></dl><dl class="exception"><dt id="nntplib.NNTPDataError"><span class="yiyi-st" id="yiyi-54"> <em class="property">exception </em><code class="descclassname">nntplib.</code><code class="descname">NNTPDataError</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-55">在响应数据中存在一些错误时引发异常。</span></p></dd></dl><div class="section" id="nntp-objects"><h2><span class="yiyi-st" id="yiyi-56">21.16.1. </span><span class="yiyi-st" id="yiyi-57">NNTP Objects</span></h2><p><span class="yiyi-st" id="yiyi-58">连接时,<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a><a class="reference internal" href="#nntplib.NNTP_SSL" title="nntplib.NNTP_SSL"><code class="xref py py-class docutils literal"><span class="pre">NNTP_SSL</span></code></a>对象支持以下方法和属性。</span></p><div class="section" id="attributes"><h3><span class="yiyi-st" id="yiyi-59">21.16.1.1. </span><span class="yiyi-st" id="yiyi-60">Attributes</span></h3><dl class="attribute"><dt id="nntplib.NNTP.nntp_version"><span class="yiyi-st" id="yiyi-61"> <code class="descclassname">NNTP.</code><code class="descname">nntp_version</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-62">表示服务器支持的NNTP协议版本的整数。</span><span class="yiyi-st" id="yiyi-63">在实践中,对于为其他人广告<span class="target" id="index-5"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3977.html"><strong>RFC 3977</strong></a>符合性和<code class="docutils literal"><span class="pre">1</span></code>的服务器,这应该是<code class="docutils literal"><span class="pre">2</span></code></span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-64"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><dl class="attribute"><dt id="nntplib.NNTP.nntp_implementation"><span class="yiyi-st" id="yiyi-65"> <code class="descclassname">NNTP.</code><code class="descname">nntp_implementation</code></span></dt><dd><p><span class="yiyi-st" id="yiyi-66">描述NNTP服务器的软件名称和版本的字符串<a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a>(如果服务器未通知)。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-67"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl></div><div class="section" id="methods"><h3><span class="yiyi-st" id="yiyi-68">21.16.1.2. </span><span class="yiyi-st" id="yiyi-69">Methods</span></h3><p><span class="yiyi-st" id="yiyi-70">作为几乎所有方法的返回元组中的第一个项目返回的<em>响应</em>是服务器的响应:以三位数代码开头的字符串。</span><span class="yiyi-st" id="yiyi-71">如果服务器的响应指示错误,则方法引发上述异常之一。</span></p><p><span class="yiyi-st" id="yiyi-72">许多以下方法采用可选的仅关键字参数<em>文件</em></span><span class="yiyi-st" id="yiyi-73">当提供<em>文件</em>参数时,它必须是为二进制写入打开的<a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file object</span></a>或要写入的磁盘文件的名称。</span><span class="yiyi-st" id="yiyi-74">然后,该方法将服务器返回的任何数据(响应行和终止点除外)写入文件;方法通常返回的任何行,元组或对象的列表将为空。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-75"><span class="versionmodified">在版本3.2中更改:</span>以下许多方法已重做并修复这使得它们与3.1版本不兼容。</span></p></div><dl class="method"><dt id="nntplib.NNTP.quit"><span class="yiyi-st" id="yiyi-76"> <code class="descclassname">NNTP.</code><code class="descname">quit</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-77">发送<code class="docutils literal"><span class="pre">QUIT</span></code>命令并关闭连接。</span><span class="yiyi-st" id="yiyi-78">调用此方法后不应调用NNTP对象的其他方法。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.getwelcome"><span class="yiyi-st" id="yiyi-79"> <code class="descclassname">NNTP.</code><code class="descname">getwelcome</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-80">返回服务器发送的欢迎消息以回复初始连接。</span><span class="yiyi-st" id="yiyi-81">(此消息有时包含可能与用户相关的免责声明或帮助信息。)</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.getcapabilities"><span class="yiyi-st" id="yiyi-82"> <code class="descclassname">NNTP.</code><code class="descname">getcapabilities</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-83">将服务器公布的<span class="target" id="index-6"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3977.html"><strong>RFC 3977</strong></a>功能作为<a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal"><span class="pre">dict</span></code></a>实例映射功能名称返回(可能为空)值列表。</span><span class="yiyi-st" id="yiyi-84">在不理解<code class="docutils literal"><span class="pre">CAPABILITIES</span></code>命令的旧服务器上,将返回一个空字典。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">NNTP</span><span class="p">(</span><span class="s1">'news.gmane.org'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="s1">'POST'</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">getcapabilities</span><span class="p">()</span>
<span class="go">True</span>
</code></pre><div class="versionadded"><p><span class="yiyi-st" id="yiyi-85"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><dl class="method"><dt id="nntplib.NNTP.login"><span class="yiyi-st" id="yiyi-86"> <code class="descclassname">NNTP.</code><code class="descname">login</code><span class="sig-paren">(</span><em>user=None</em>, <em>password=None</em>, <em>usenetrc=True</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-87">使用用户名和密码发送<code class="docutils literal"><span class="pre">AUTHINFO</span></code>命令。</span><span class="yiyi-st" id="yiyi-88">如果<em>用户</em><em>密码</em>为无,<em>usenetrc</em>为true则将使用<code class="docutils literal"><span class="pre">~/.netrc</span></code></span></p><p><span class="yiyi-st" id="yiyi-89">除非故意延迟,否则通常在<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>对象初始化期间执行登录,并且不需要单独调用此函数。</span><span class="yiyi-st" id="yiyi-90">要强制身份验证延迟,您不能在创建对象时设置<em>用户</em><em>密码</em>,并且必须将<em>usenetrc</em>设置为False。</span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-91"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><dl class="method"><dt id="nntplib.NNTP.starttls"><span class="yiyi-st" id="yiyi-92"> <code class="descclassname">NNTP.</code><code class="descname">starttls</code><span class="sig-paren">(</span><em>ssl_context=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-93">发送<code class="docutils literal"><span class="pre">STARTTLS</span></code>命令。</span><span class="yiyi-st" id="yiyi-94">这将启用NNTP连接上的加密。</span><span class="yiyi-st" id="yiyi-95"><em>ssl_context</em>参数是可选的,应为<a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal"><span class="pre">ssl.SSLContext</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-96">有关最佳做法,请参阅<a class="reference internal" href="ssl.html#ssl-security"><span>Security considerations</span></a></span></p><p><span class="yiyi-st" id="yiyi-97">请注意,在传输验证信息后,可能无法进行验证,如果可能,在<a class="reference internal" href="#nntplib.NNTP" title="nntplib.NNTP"><code class="xref py py-class docutils literal"><span class="pre">NNTP</span></code></a>对象初始化期间,默认会进行验证。</span><span class="yiyi-st" id="yiyi-98">有关抑制此行为的信息,请参见<a class="reference internal" href="#nntplib.NNTP.login" title="nntplib.NNTP.login"><code class="xref py py-meth docutils literal"><span class="pre">NNTP.login()</span></code></a></span></p><div class="versionadded"><p><span class="yiyi-st" id="yiyi-99"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-100"><span class="versionmodified">在版本3.4中更改:</span>此方法现在支持使用<a class="reference internal" href="ssl.html#ssl.SSLContext.check_hostname" title="ssl.SSLContext.check_hostname"><code class="xref py py-attr docutils literal"><span class="pre">ssl.SSLContext.check_hostname</span></code></a><em>服务器名称指示</em>进行主机名检查(请参阅<a class="reference internal" href="ssl.html#ssl.HAS_SNI" title="ssl.HAS_SNI"><code class="xref py py-data docutils literal"><span class="pre">ssl.HAS_SNI</span></code></a>)。</span></p></div></dd></dl><dl class="method"><dt id="nntplib.NNTP.newgroups"><span class="yiyi-st" id="yiyi-101"> <code class="descclassname">NNTP.</code><code class="descname">newgroups</code><span class="sig-paren">(</span><em>date</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-102">发送<code class="docutils literal"><span class="pre">NEWGROUPS</span></code>命令。</span><span class="yiyi-st" id="yiyi-103"><em>date</em>参数应为<a class="reference internal" href="datetime.html#datetime.date" title="datetime.date"><code class="xref py py-class docutils literal"><span class="pre">datetime.date</span></code></a><a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime.datetime</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-104">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">组)</span></code>其中<em></em>是表示自给定<em>日期</em></span><span class="yiyi-st" id="yiyi-105">如果提供<em>文件</em>,则<em></em>将为空。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">date</span><span class="p">,</span> <span class="n">timedelta</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">groups</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">newgroups</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span> <span class="o">-</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">3</span><span class="p">))</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">groups</span><span class="p">)</span>
<span class="go">85</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">groups</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="go">GroupInfo(group='gmane.network.tor.devel', last='4', first='1', flag='m')</span>
</code></pre></dd></dl><dl class="method"><dt id="nntplib.NNTP.newnews"><span class="yiyi-st" id="yiyi-106"> <code class="descclassname">NNTP.</code><code class="descname">newnews</code><span class="sig-paren">(</span><em>group</em>, <em>date</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-107">发送<code class="docutils literal"><span class="pre">NEWNEWS</span></code>命令。</span><span class="yiyi-st" id="yiyi-108">这里,<em>group</em>是组名或<code class="docutils literal"><span class="pre">'*'</span></code><em>日期</em><a class="reference internal" href="#nntplib.NNTP.newgroups" title="nntplib.NNTP.newgroups"><code class="xref py py-meth docutils literal"><span class="pre">newgroups()</span></code></a></span><span class="yiyi-st" id="yiyi-109">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">文章)</span></code>其中<em>文章</em>是邮件ID列表。</span></p><p><span class="yiyi-st" id="yiyi-110">NNTP服务器管理员经常禁用此命令。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.list"><span class="yiyi-st" id="yiyi-111"> <code class="descclassname">NNTP.</code><code class="descname">list</code><span class="sig-paren">(</span><em>group_pattern=None</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-112">发送<code class="docutils literal"><span class="pre">LIST</span></code><code class="docutils literal"><span class="pre">LIST</span> <span class="pre">ACTIVE</span></code>命令。</span><span class="yiyi-st" id="yiyi-113">返回一个<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">列表)</span></code>其中<em>列表</em>是表示所有可用组NNTP服务器可选择匹配模式字符串<em>group_pattern</em></span><span class="yiyi-st" id="yiyi-114">每个元组具有<code class="docutils literal"><span class="pre">(组,</span> <span class="pre">最后,</span> <span class="pre">第一,</span> <span class="pre">标志)</span></code>其中<em></em>是组名称,<em>最后</em><em>第一个</em>是最后和第一个商品编号,而<em>这些值之一:</em></span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-115"><code class="docutils literal"><span class="pre">y</span></code>:允许来自同伴的本地帖子和文章。</span></li><li><span class="yiyi-st" id="yiyi-116"><code class="docutils literal"><span class="pre">m</span></code>:群组已审核,所有过帐都必须通过审核。</span></li><li><span class="yiyi-st" id="yiyi-117"><code class="docutils literal"><span class="pre">n</span></code>:不允许发布本地内容,仅允许来自同行的文章。</span></li><li><span class="yiyi-st" id="yiyi-118"><code class="docutils literal"><span class="pre">j</span></code>:来自对等体的文章将替换为垃圾组。</span></li><li><span class="yiyi-st" id="yiyi-119"><code class="docutils literal"><span class="pre">x</span></code>:没有本地发布,并且来自对等端的文章被忽略。</span></li><li><span class="yiyi-st" id="yiyi-120"><code class="docutils literal"><span class="pre">=foo.bar</span></code>:文章被归档在<code class="docutils literal"><span class="pre">foo.bar</span></code>组中。</span></li></ul><p><span class="yiyi-st" id="yiyi-121">如果<em>标志</em>有另一个值,则新闻组的状态应被视为未知。</span></p><p><span class="yiyi-st" id="yiyi-122">此命令可以返回非常大的结果,特别是如果未指定<em>group_pattern</em></span><span class="yiyi-st" id="yiyi-123">最好是离线缓存结果,除非你真的需要刷新它们。</span></p><div class="versionchanged"><p><span class="yiyi-st" id="yiyi-124"><span class="versionmodified">在版本3.2中更改:</span> <em>group_pattern</em>已添加。</span></p></div></dd></dl><dl class="method"><dt id="nntplib.NNTP.descriptions"><span class="yiyi-st" id="yiyi-125"> <code class="descclassname">NNTP.</code><code class="descname">descriptions</code><span class="sig-paren">(</span><em>grouppattern</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-126">发送<code class="docutils literal"><span class="pre">LIST</span> <span class="pre">NEWSGROUPS</span></code>命令,其中<em>grouppattern</em><span class="target" id="index-7"><a class="rfc reference external" href="https://tools.ietf.org/html/rfc3977.html"><strong>RFC 3977</strong></a>它本质上与DOS或UNIX shell通配符字符串相同</span></span><span class="yiyi-st" id="yiyi-127">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">描述)</span></code>,其中<em>描述</em>是将组名称映射到文本描述的字典。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">descs</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">descriptions</span><span class="p">(</span><span class="s1">'gmane.comp.python.*'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">descs</span><span class="p">)</span>
<span class="go">295</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">descs</span><span class="o">.</span><span class="n">popitem</span><span class="p">()</span>
<span class="go">('gmane.comp.python.bio.general', 'BioPython discussion list (Moderated)')</span>
</code></pre></dd></dl><dl class="method"><dt id="nntplib.NNTP.description"><span class="yiyi-st" id="yiyi-128"> <code class="descclassname">NNTP.</code><code class="descname">description</code><span class="sig-paren">(</span><em>group</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-129">获取单个组<em></em>的说明。</span><span class="yiyi-st" id="yiyi-130">如果多个组匹配(如果'group'是一个真正的wildmat字符串返回第一个匹配。</span><span class="yiyi-st" id="yiyi-131">如果没有匹配,返回一个空字符串。</span></p><p><span class="yiyi-st" id="yiyi-132">这会从服务器中删除响应代码。</span><span class="yiyi-st" id="yiyi-133">如果需要响应代码,请使用<a class="reference internal" href="#nntplib.NNTP.descriptions" title="nntplib.NNTP.descriptions"><code class="xref py py-meth docutils literal"><span class="pre">descriptions()</span></code></a></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.group"><span class="yiyi-st" id="yiyi-134"> <code class="descclassname">NNTP.</code><code class="descname">group</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-135">发送<code class="docutils literal"><span class="pre">GROUP</span></code>命令,其中<em>名称</em>是组名称。</span><span class="yiyi-st" id="yiyi-136">选择组作为当前组(如果存在)。</span><span class="yiyi-st" id="yiyi-137">返回元组<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">计数,</span> <span class="pre">第一,</span> <span class="pre">最后,</span> <span class="pre">t5&gt;</span></code>其中<em>计数</em>是组中的(估计)物品数量,<em>第一</em>是组中的第一个物品编号,<em>t8&gt;是组中的最后一个商品编号,<em>name</em>是组名称。</em></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.over"><span class="yiyi-st" id="yiyi-138"> <code class="descclassname">NNTP.</code><code class="descname">over</code><span class="sig-paren">(</span><em>message_spec</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-139">在旧服务器上发送<code class="docutils literal"><span class="pre">OVER</span></code>命令或<code class="docutils literal"><span class="pre">XOVER</span></code>命令。</span><span class="yiyi-st" id="yiyi-140"><em>message_spec</em> can be either a string representing a message id, or a <code class="docutils literal"><span class="pre">(first,</span> <span class="pre">last)</span></code> tuple of numbers indicating a range of articles in the current group, or a <code class="docutils literal"><span class="pre">(first,</span> <span class="pre">None)</span></code> tuple indicating a range of articles starting from <em>first</em> to the last article in the current group, or <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a> to select the current article in the current group.</span></p><p><span class="yiyi-st" id="yiyi-141">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">概述)</span></code></span><span class="yiyi-st" id="yiyi-142"><em>概述</em><code class="docutils literal"><span class="pre">article_number</span> <span class="pre">概述)</span></code>元组的列表,由<em>message_spec </em></span><span class="yiyi-st" id="yiyi-143">每个<em>概述</em>是具有相同数量项目的字典,但此数字取决于服务器。</span><span class="yiyi-st" id="yiyi-144">这些项目是消息头(键是较小包头的名称)或元数据项(键是元数据名称前加<code class="docutils literal"><span class="pre">":"</span></code>)。</span><span class="yiyi-st" id="yiyi-145">NNTP规范保证以下项目存在</span></p><ul class="simple"><li><span class="yiyi-st" id="yiyi-146"><code class="docutils literal"><span class="pre">subject</span></code><code class="docutils literal"><span class="pre">from</span></code><code class="docutils literal"><span class="pre">date</span></code><code class="docutils literal"><span class="pre">message-id</span></code><code class="docutils literal"><span class="pre">references</span></code></span></li><li><span class="yiyi-st" id="yiyi-147"><code class="docutils literal"><span class="pre">:bytes</span></code>元数据:整个原始文章中的字节数(包括标题和正文)</span></li><li><span class="yiyi-st" id="yiyi-148"><code class="docutils literal"><span class="pre">:lines</span></code> metadata文章正文中的行数</span></li></ul><p><span class="yiyi-st" id="yiyi-149">每个项目的值为字符串,如果不存在,则为<a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a></span></p><p><span class="yiyi-st" id="yiyi-150">建议对头值使用<a class="reference internal" href="#nntplib.decode_header" title="nntplib.decode_header"><code class="xref py py-func docutils literal"><span class="pre">decode_header()</span></code></a>函数它们可能包含非ASCII字符</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">last</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s1">'gmane.comp.python.devel'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">overviews</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">over</span><span class="p">((</span><span class="n">last</span><span class="p">,</span> <span class="n">last</span><span class="p">))</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">art_num</span><span class="p">,</span> <span class="n">over</span> <span class="o">=</span> <span class="n">overviews</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">art_num</span>
<span class="go">117216</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="n">over</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="go">['xref', 'from', ':lines', ':bytes', 'references', 'date', 'message-id', 'subject']</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">over</span><span class="p">[</span><span class="s1">'from'</span><span class="p">]</span>
<span class="go">'=?UTF-8?B?Ik1hcnRpbiB2LiBMw7Z3aXMi?= &lt;martin@v.loewis.de&gt;'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">nntplib</span><span class="o">.</span><span class="n">decode_header</span><span class="p">(</span><span class="n">over</span><span class="p">[</span><span class="s1">'from'</span><span class="p">])</span>
<span class="go">'"Martin v. Löwis" &lt;martin@v.loewis.de&gt;'</span>
</code></pre><div class="versionadded"><p><span class="yiyi-st" id="yiyi-151"><span class="versionmodified">版本3.2中的新功能。</span></span></p></div></dd></dl><dl class="method"><dt id="nntplib.NNTP.help"><span class="yiyi-st" id="yiyi-152"> <code class="descclassname">NNTP.</code><code class="descname">help</code><span class="sig-paren">(</span><em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-153">发送<code class="docutils literal"><span class="pre">HELP</span></code>命令。</span><span class="yiyi-st" id="yiyi-154">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">列表)</span></code>其中<em>列表</em>是帮助字符串列表。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.stat"><span class="yiyi-st" id="yiyi-155"> <code class="descclassname">NNTP.</code><code class="descname">stat</code><span class="sig-paren">(</span><em>message_spec=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-156">Send a <code class="docutils literal"><span class="pre">STAT</span></code> command, where <em>message_spec</em> is either a message id (enclosed in <code class="docutils literal"><span class="pre">'&lt;'</span></code> and <code class="docutils literal"><span class="pre">'&gt;'</span></code>) or an article number in the current group. </span><span class="yiyi-st" id="yiyi-157">如果省略<em>message_spec</em><a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a>,则会考虑当前组中的当前文章。</span><span class="yiyi-st" id="yiyi-158">返回三次<code class="docutils literal"><span class="pre">(回应,</span> <span class="pre">号码,</span> <span class="pre">id</span></code>其中<em>号码</em> number和<em>id</em>是消息ID。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">first</span><span class="p">,</span> <span class="n">last</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s1">'gmane.comp.python.devel'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">number</span><span class="p">,</span> <span class="n">message_id</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">first</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">number</span><span class="p">,</span> <span class="n">message_id</span>
<span class="go">(9099, '&lt;20030112190404.GE29873@epoch.metaslash.com&gt;')</span>
</code></pre></dd></dl><dl class="method"><dt id="nntplib.NNTP.next"><span class="yiyi-st" id="yiyi-159"> <code class="descclassname">NNTP.</code><code class="descname">next</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-160">发送<code class="docutils literal"><span class="pre">NEXT</span></code>命令。</span><span class="yiyi-st" id="yiyi-161">返回<a class="reference internal" href="#nntplib.NNTP.stat" title="nntplib.NNTP.stat"><code class="xref py py-meth docutils literal"><span class="pre">stat()</span></code></a></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.last"><span class="yiyi-st" id="yiyi-162"> <code class="descclassname">NNTP.</code><code class="descname">last</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-163">发送<code class="docutils literal"><span class="pre">LAST</span></code>命令。</span><span class="yiyi-st" id="yiyi-164">返回<a class="reference internal" href="#nntplib.NNTP.stat" title="nntplib.NNTP.stat"><code class="xref py py-meth docutils literal"><span class="pre">stat()</span></code></a></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.article"><span class="yiyi-st" id="yiyi-165"> <code class="descclassname">NNTP.</code><code class="descname">article</code><span class="sig-paren">(</span><em>message_spec=None</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-166">发送<code class="docutils literal"><span class="pre">ARTICLE</span></code>命令,其中<em>message_spec</em>的含义与<a class="reference internal" href="#nntplib.NNTP.stat" title="nntplib.NNTP.stat"><code class="xref py py-meth docutils literal"><span class="pre">stat()</span></code></a>相同。</span><span class="yiyi-st" id="yiyi-167">返回元组<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">信息)</span></code>其中<em>info</em><a class="reference internal" href="collections.html#collections.namedtuple" title="collections.namedtuple"><code class="xref py py-class docutils literal"><span class="pre">namedtuple</span></code></a>属性<em></em><em>message_id</em><em></em>(按此顺序)。</span><span class="yiyi-st" id="yiyi-168"><em>number</em>是组中的文章编号如果信息不可用则为0<em>message_id</em>消息ID为字符串<em></em>包括包括头部和主体的原始消息的行的列表(不终止换行符)。</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">resp</span><span class="p">,</span> <span class="n">info</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">article</span><span class="p">(</span><span class="s1">'&lt;20030112190404.GE29873@epoch.metaslash.com&gt;'</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">info</span><span class="o">.</span><span class="n">number</span>
<span class="go">0</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">info</span><span class="o">.</span><span class="n">message_id</span>
<span class="go">'&lt;20030112190404.GE29873@epoch.metaslash.com&gt;'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">len</span><span class="p">(</span><span class="n">info</span><span class="o">.</span><span class="n">lines</span><span class="p">)</span>
<span class="go">65</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">info</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="go">b'Path: main.gmane.org!not-for-mail'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">info</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="go">b'From: Neal Norwitz &lt;neal@metaslash.com&gt;'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">info</span><span class="o">.</span><span class="n">lines</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">:]</span>
<span class="go">[b'There is a patch for 2.3 as well as 2.2.', b'', b'Neal']</span>
</code></pre></dd></dl><dl class="method"><dt id="nntplib.NNTP.head"><span class="yiyi-st" id="yiyi-169"> <code class="descclassname">NNTP.</code><code class="descname">head</code><span class="sig-paren">(</span><em>message_spec=None</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-170"><a class="reference internal" href="#nntplib.NNTP.article" title="nntplib.NNTP.article"><code class="xref py py-meth docutils literal"><span class="pre">article()</span></code></a>相同,但发送<code class="docutils literal"><span class="pre">HEAD</span></code>命令。</span><span class="yiyi-st" id="yiyi-171">返回的(或写入到<em>文件</em>)的<em></em>将仅包含消息头,而不包含正文。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.body"><span class="yiyi-st" id="yiyi-172"> <code class="descclassname">NNTP.</code><code class="descname">body</code><span class="sig-paren">(</span><em>message_spec=None</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-173"><a class="reference internal" href="#nntplib.NNTP.article" title="nntplib.NNTP.article"><code class="xref py py-meth docutils literal"><span class="pre">article()</span></code></a>相同,但发送<code class="docutils literal"><span class="pre">BODY</span></code>命令。</span><span class="yiyi-st" id="yiyi-174">返回的(或写入到<em>文件</em>)的<em></em>将仅包含消息正文,而不包含头。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.post"><span class="yiyi-st" id="yiyi-175"> <code class="descclassname">NNTP.</code><code class="descname">post</code><span class="sig-paren">(</span><em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-176">使用<code class="docutils literal"><span class="pre">POST</span></code>命令发布文章。</span><span class="yiyi-st" id="yiyi-177"><em>数据</em>参数是为二进制读取打开的<a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file object</span></a></span><span class="yiyi-st" id="yiyi-178">它应该代表一个格式正确的新闻文章,包括所需的标题。</span><span class="yiyi-st" id="yiyi-179"><a class="reference internal" href="#nntplib.NNTP.post" title="nntplib.NNTP.post"><code class="xref py py-meth docutils literal"><span class="pre">post()</span></code></a>方法自动转义以<code class="docutils literal"><span class="pre">.</span></code></span><span class="yiyi-st" id="yiyi-180">并附加终止线。</span></p><p><span class="yiyi-st" id="yiyi-181">如果方法成功,则返回服务器的响应。</span><span class="yiyi-st" id="yiyi-182">如果服务器拒绝发布,则会引发<a class="reference internal" href="#nntplib.NNTPReplyError" title="nntplib.NNTPReplyError"><code class="xref py py-class docutils literal"><span class="pre">NNTPReplyError</span></code></a></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.ihave"><span class="yiyi-st" id="yiyi-183"> <code class="descclassname">NNTP.</code><code class="descname">ihave</code><span class="sig-paren">(</span><em>message_id</em>, <em>data</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-184">发送<code class="docutils literal"><span class="pre">IHAVE</span></code>命令。</span><span class="yiyi-st" id="yiyi-185"><em>message_id</em> is the id of the message to send to the server (enclosed in <code class="docutils literal"><span class="pre">'&lt;'</span></code> and <code class="docutils literal"><span class="pre">'&gt;'</span></code>). </span><span class="yiyi-st" id="yiyi-186"><em>数据</em>参数和返回值与<a class="reference internal" href="#nntplib.NNTP.post" title="nntplib.NNTP.post"><code class="xref py py-meth docutils literal"><span class="pre">post()</span></code></a>相同。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.date"><span class="yiyi-st" id="yiyi-187"> <code class="descclassname">NNTP.</code><code class="descname">date</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-188">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">日期)</span></code></span><span class="yiyi-st" id="yiyi-189"><em>date</em>是包含服务器当前日期和时间的<a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal"><span class="pre">datetime</span></code></a>对象。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.slave"><span class="yiyi-st" id="yiyi-190"> <code class="descclassname">NNTP.</code><code class="descname">slave</code><span class="sig-paren">(</span><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-191">发送<code class="docutils literal"><span class="pre">SLAVE</span></code>命令。</span><span class="yiyi-st" id="yiyi-192">返回服务器的<em>响应</em></span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.set_debuglevel"><span class="yiyi-st" id="yiyi-193"> <code class="descclassname">NNTP.</code><code class="descname">set_debuglevel</code><span class="sig-paren">(</span><em>level</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-194">设置实例的调试级别。</span><span class="yiyi-st" id="yiyi-195">这控制打印的调试输出量。</span><span class="yiyi-st" id="yiyi-196">默认值<code class="docutils literal"><span class="pre">0</span></code>不产生调试输出。</span><span class="yiyi-st" id="yiyi-197"><code class="docutils literal"><span class="pre">1</span></code>产生适量的调试输出,通常每个请求或响应都有一行。</span><span class="yiyi-st" id="yiyi-198"><code class="docutils literal"><span class="pre">2</span></code>或更高会产生最大调试输出量,记录连接上发送和接收的每行(包括消息文本)。</span></p></dd></dl><p><span class="yiyi-st" id="yiyi-199">以下是在<span class="target" id="index-8"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc2980.html"><strong>RFC 2980</strong></a>中定义的可选NNTP扩展。</span><span class="yiyi-st" id="yiyi-200">其中一些已被<span class="target" id="index-9"></span> <a class="rfc reference external" href="https://tools.ietf.org/html/rfc3977.html"><strong>RFC 3977</strong></a>中的新命令取代。</span></p><dl class="method"><dt id="nntplib.NNTP.xhdr"><span class="yiyi-st" id="yiyi-201"> <code class="descclassname">NNTP.</code><code class="descname">xhdr</code><span class="sig-paren">(</span><em>hdr</em>, <em>str</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-202">发送<code class="docutils literal"><span class="pre">XHDR</span></code>命令。</span><span class="yiyi-st" id="yiyi-203"><em>hdr</em>参数是标题关键字,例如</span><span class="yiyi-st" id="yiyi-204"><code class="docutils literal"><span class="pre">'subject'</span></code></span><span class="yiyi-st" id="yiyi-205"><em>str</em>参数应为<code class="docutils literal"><span class="pre">'first-last'</span></code>,其中<em>第一</em><em>最后</em>数字进行搜索。</span><span class="yiyi-st" id="yiyi-206">返回一对<code class="docutils literal"><span class="pre">(响应,</span> <span class="pre">列表)</span></code>,其中<em>列表</em><code class="docutils literal"><span class="pre">id</span> <span class="pre">text</span></code>,其中<em>id</em>是文章编号(字符串),<em>该文章的请求标题的文本。</em></span><span class="yiyi-st" id="yiyi-207">如果提供了<em>文件</em>参数,则<code class="docutils literal"><span class="pre">XHDR</span></code>命令的输出存储在文件中。</span><span class="yiyi-st" id="yiyi-208">如果<em>文件</em>是字符串,那么该方法将打开具有该名称的文件,写入该文件,然后关闭它。</span><span class="yiyi-st" id="yiyi-209">如果<em>文件</em><a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file object</span></a>,则它将开始调用<code class="xref py py-meth docutils literal"><span class="pre">write()</span></code>来存储命令输出的行。</span><span class="yiyi-st" id="yiyi-210">如果提供<em>文件</em>,则返回的<em>列表</em>是空列表。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.xover"><span class="yiyi-st" id="yiyi-211"> <code class="descclassname">NNTP.</code><code class="descname">xover</code><span class="sig-paren">(</span><em>start</em>, <em>end</em>, <em>*</em>, <em>file=None</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-212">发送<code class="docutils literal"><span class="pre">XOVER</span></code>命令。</span><span class="yiyi-st" id="yiyi-213"><em>开始</em><em>结束</em>是定义要选择的文章范围的文章编号。</span><span class="yiyi-st" id="yiyi-214"><a class="reference internal" href="#nntplib.NNTP.over" title="nntplib.NNTP.over"><code class="xref py py-meth docutils literal"><span class="pre">over()</span></code></a>的返回值相同。</span><span class="yiyi-st" id="yiyi-215">建议改用<a class="reference internal" href="#nntplib.NNTP.over" title="nntplib.NNTP.over"><code class="xref py py-meth docutils literal"><span class="pre">over()</span></code></a>,因为它会自动使用较新的<code class="docutils literal"><span class="pre">OVER</span></code>命令(如果可用)。</span></p></dd></dl><dl class="method"><dt id="nntplib.NNTP.xpath"><span class="yiyi-st" id="yiyi-216"> <code class="descclassname">NNTP.</code><code class="descname">xpath</code><span class="sig-paren">(</span><em>id</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-217">Return a pair <code class="docutils literal"><span class="pre">(resp,</span> <span class="pre">path)</span></code>, where <em>path</em> is the directory path to the article with message ID <em>id</em>. </span><span class="yiyi-st" id="yiyi-218">大多数情况下NNTP服务器管理员未启用此扩展。</span></p><div class="deprecated"><p><span class="yiyi-st" id="yiyi-219"><span class="versionmodified">自版本3.3后已弃用:</span>未主动使用XPATH扩展。</span></p></div></dd></dl></div></div><div class="section" id="utility-functions"><h2><span class="yiyi-st" id="yiyi-220">21.16.2. </span><span class="yiyi-st" id="yiyi-221">Utility functions</span></h2><p><span class="yiyi-st" id="yiyi-222">该模块还定义了以下效用函数:</span></p><dl class="function"><dt id="nntplib.decode_header"><span class="yiyi-st" id="yiyi-223"> <code class="descclassname">nntplib.</code><code class="descname">decode_header</code><span class="sig-paren">(</span><em>header_str</em><span class="sig-paren">)</span></span></dt><dd><p><span class="yiyi-st" id="yiyi-224">解码标头值取消转义任何转义的非ASCII字符。</span><span class="yiyi-st" id="yiyi-225"><em>header_str</em>必须是<a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal"><span class="pre">str</span></code></a>对象。</span><span class="yiyi-st" id="yiyi-226">返回未转义的值。</span><span class="yiyi-st" id="yiyi-227">建议使用此功能以人类可读的形式显示一些标题:</span></p><pre><code class="language-python"><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">decode_header</span><span class="p">(</span><span class="s2">"Some subject"</span><span class="p">)</span>
<span class="go">'Some subject'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">decode_header</span><span class="p">(</span><span class="s2">"=?ISO-8859-15?Q?D=E9buter_en_Python?="</span><span class="p">)</span>
<span class="go">'Débuter en Python'</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">decode_header</span><span class="p">(</span><span class="s2">"Re: =?UTF-8?B?cHJvYmzDqG1lIGRlIG1hdHJpY2U=?="</span><span class="p">)</span>
<span class="go">'Re: problème de matrice'</span>
</code></pre></dd></dl></div></div></div>