mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 15:04:05 +08:00
81 lines
60 KiB
HTML
81 lines
60 KiB
HTML
<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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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>,或<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>命令用于标识和验证服务器的用户。</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">>>> </span><span class="kn">from</span> <span class="nn">nntplib</span> <span class="k">import</span> <span class="n">NNTP</span>
|
||
<span class="gp">>>> </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">>>></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>,则使用端口563(NNTPS)。</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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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></span></code>其中<em>计数</em>是组中的(估计)物品数量,<em>第一</em>是组中的第一个物品编号,<em>t8>是组中的最后一个商品编号,<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">>>> </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">>>> </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">>>> </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">>>> </span><span class="n">art_num</span>
|
||
<span class="go">117216</span>
|
||
<span class="gp">>>> </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">>>> </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?= <martin@v.loewis.de>'</span>
|
||
<span class="gp">>>> </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" <martin@v.loewis.de>'</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">'<'</span></code> and <code class="docutils literal"><span class="pre">'>'</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">>>> </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">>>> </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">>>> </span><span class="n">number</span><span class="p">,</span> <span class="n">message_id</span>
|
||
<span class="go">(9099, '<20030112190404.GE29873@epoch.metaslash.com>')</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">>>> </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">'<20030112190404.GE29873@epoch.metaslash.com>'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">info</span><span class="o">.</span><span class="n">number</span>
|
||
<span class="go">0</span>
|
||
<span class="gp">>>> </span><span class="n">info</span><span class="o">.</span><span class="n">message_id</span>
|
||
<span class="go">'<20030112190404.GE29873@epoch.metaslash.com>'</span>
|
||
<span class="gp">>>> </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">>>> </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">>>> </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 <neal@metaslash.com>'</span>
|
||
<span class="gp">>>> </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">'<'</span></code> and <code class="docutils literal"><span class="pre">'>'</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">>>> </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">>>> </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">>>> </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> |