788 lines
70 KiB
HTML
788 lines
70 KiB
HTML
|
|
|||
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" />
|
|||
|
<title>xmlrpc.client — XML-RPC client access — Python 3.7.4 documentation</title>
|
|||
|
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
|||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|||
|
|
|||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/language_data.js"></script>
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
|||
|
|
|||
|
<link rel="search" type="application/opensearchdescription+xml"
|
|||
|
title="Search within Python 3.7.4 documentation"
|
|||
|
href="../_static/opensearch.xml"/>
|
|||
|
<link rel="author" title="About these documents" href="../about.html" />
|
|||
|
<link rel="index" title="Index" href="../genindex.html" />
|
|||
|
<link rel="search" title="Search" href="../search.html" />
|
|||
|
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
|||
|
<link rel="next" title="xmlrpc.server — Basic XML-RPC servers" href="xmlrpc.server.html" />
|
|||
|
<link rel="prev" title="xmlrpc — XMLRPC server and client modules" href="xmlrpc.html" />
|
|||
|
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
|||
|
<link rel="canonical" href="https://docs.python.org/3/library/xmlrpc.client.html" />
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/switchers.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen {
|
|||
|
table.full-width-table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
</head><body>
|
|||
|
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
accesskey="I">index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="xmlrpc.server.html" title="xmlrpc.server — Basic XML-RPC servers"
|
|||
|
accesskey="N">next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="xmlrpc.html" title="xmlrpc — XMLRPC server and client modules"
|
|||
|
accesskey="P">previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="internet.html" accesskey="U">Internet Protocols and Support</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="document">
|
|||
|
<div class="documentwrapper">
|
|||
|
<div class="bodywrapper">
|
|||
|
<div class="body" role="main">
|
|||
|
|
|||
|
<div class="section" id="module-xmlrpc.client">
|
|||
|
<span id="xmlrpc-client-xml-rpc-client-access"></span><h1><a class="reference internal" href="#module-xmlrpc.client" title="xmlrpc.client: XML-RPC client access."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc.client</span></code></a> — XML-RPC client access<a class="headerlink" href="#module-xmlrpc.client" title="Permalink to this headline">¶</a></h1>
|
|||
|
<p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.7/Lib/xmlrpc/client.py">Lib/xmlrpc/client.py</a></p>
|
|||
|
<hr class="docutils" />
|
|||
|
<p>XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP(S) as a
|
|||
|
transport. With it, a client can call methods with parameters on a remote
|
|||
|
server (the server is named by a URI) and get back structured data. This module
|
|||
|
supports writing XML-RPC client code; it handles all the details of translating
|
|||
|
between conformable Python objects and XML on the wire.</p>
|
|||
|
<div class="admonition warning">
|
|||
|
<p class="admonition-title">Warning</p>
|
|||
|
<p>The <a class="reference internal" href="#module-xmlrpc.client" title="xmlrpc.client: XML-RPC client access."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc.client</span></code></a> module is not secure against maliciously
|
|||
|
constructed data. If you need to parse untrusted or unauthenticated data see
|
|||
|
<a class="reference internal" href="xml.html#xml-vulnerabilities"><span class="std std-ref">XML vulnerabilities</span></a>.</p>
|
|||
|
</div>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>For HTTPS URIs, <a class="reference internal" href="#module-xmlrpc.client" title="xmlrpc.client: XML-RPC client access."><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc.client</span></code></a> now performs all the necessary
|
|||
|
certificate and hostname checks by default.</p>
|
|||
|
</div>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.ServerProxy">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">ServerProxy</code><span class="sig-paren">(</span><em>uri</em>, <em>transport=None</em>, <em>encoding=None</em>, <em>verbose=False</em>, <em>allow_none=False</em>, <em>use_datetime=False</em>, <em>use_builtin_types=False</em>, <em>*</em>, <em>context=None</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.ServerProxy" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.3: </span>The <em>use_builtin_types</em> flag was added.</p>
|
|||
|
</div>
|
|||
|
<p>A <a class="reference internal" href="#xmlrpc.client.ServerProxy" title="xmlrpc.client.ServerProxy"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerProxy</span></code></a> instance is an object that manages communication with a
|
|||
|
remote XML-RPC server. The required first argument is a URI (Uniform Resource
|
|||
|
Indicator), and will normally be the URL of the server. The optional second
|
|||
|
argument is a transport factory instance; by default it is an internal
|
|||
|
<code class="xref py py-class docutils literal notranslate"><span class="pre">SafeTransport</span></code> instance for https: URLs and an internal HTTP
|
|||
|
<code class="xref py py-class docutils literal notranslate"><span class="pre">Transport</span></code> instance otherwise. The optional third argument is an
|
|||
|
encoding, by default UTF-8. The optional fourth argument is a debugging flag.</p>
|
|||
|
<p>The following parameters govern the use of the returned proxy instance.
|
|||
|
If <em>allow_none</em> is true, the Python constant <code class="docutils literal notranslate"><span class="pre">None</span></code> will be translated into
|
|||
|
XML; the default behaviour is for <code class="docutils literal notranslate"><span class="pre">None</span></code> to raise a <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a>. This is
|
|||
|
a commonly-used extension to the XML-RPC specification, but isn’t supported by
|
|||
|
all clients and servers; see <a class="reference external" href="https://web.archive.org/web/20130120074804/http://ontosys.com/xml-rpc/extensions.php">http://ontosys.com/xml-rpc/extensions.php</a>
|
|||
|
for a description.
|
|||
|
The <em>use_builtin_types</em> flag can be used to cause date/time values
|
|||
|
to be presented as <a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a> objects and binary data to be
|
|||
|
presented as <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> objects; this flag is false by default.
|
|||
|
<a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a>, <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> and <a class="reference internal" href="stdtypes.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytearray</span></code></a> objects
|
|||
|
may be passed to calls.
|
|||
|
The obsolete <em>use_datetime</em> flag is similar to <em>use_builtin_types</em> but it
|
|||
|
applies only to date/time values.</p>
|
|||
|
<p>Both the HTTP and HTTPS transports support the URL syntax extension for HTTP
|
|||
|
Basic Authentication: <code class="docutils literal notranslate"><span class="pre">http://user:pass@host:port/path</span></code>. The <code class="docutils literal notranslate"><span class="pre">user:pass</span></code>
|
|||
|
portion will be base64-encoded as an HTTP ‘Authorization’ header, and sent to
|
|||
|
the remote server as part of the connection process when invoking an XML-RPC
|
|||
|
method. You only need to use this if the remote server requires a Basic
|
|||
|
Authentication user and password. If an HTTPS URL is provided, <em>context</em> may
|
|||
|
be <a class="reference internal" href="ssl.html#ssl.SSLContext" title="ssl.SSLContext"><code class="xref py py-class docutils literal notranslate"><span class="pre">ssl.SSLContext</span></code></a> and configures the SSL settings of the underlying
|
|||
|
HTTPS connection.</p>
|
|||
|
<p>The returned instance is a proxy object with methods that can be used to invoke
|
|||
|
corresponding RPC calls on the remote server. If the remote server supports the
|
|||
|
introspection API, the proxy can also be used to query the remote server for the
|
|||
|
methods it supports (service discovery) and fetch other server-associated
|
|||
|
metadata.</p>
|
|||
|
<p>Types that are conformable (e.g. that can be marshalled through XML),
|
|||
|
include the following (and except where noted, they are unmarshalled
|
|||
|
as the same Python type):</p>
|
|||
|
<table class="docutils align-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 29%" />
|
|||
|
<col style="width: 71%" />
|
|||
|
</colgroup>
|
|||
|
<thead>
|
|||
|
<tr class="row-odd"><th class="head"><p>XML-RPC type</p></th>
|
|||
|
<th class="head"><p>Python type</p></th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">boolean</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="functions.html#bool" title="bool"><code class="xref py py-class docutils literal notranslate"><span class="pre">bool</span></code></a></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">int</span></code>, <code class="docutils literal notranslate"><span class="pre">i1</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">i2</span></code>, <code class="docutils literal notranslate"><span class="pre">i4</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">i8</span></code> or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">biginteger</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="functions.html#int" title="int"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> in range from -2147483648 to 2147483647.
|
|||
|
Values get the <code class="docutils literal notranslate"><span class="pre"><int></span></code> tag.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">double</span></code> or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">float</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="functions.html#float" title="float"><code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></a>. Values get the <code class="docutils literal notranslate"><span class="pre"><double></span></code> tag.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">string</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="stdtypes.html#str" title="str"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">array</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> or <a class="reference internal" href="stdtypes.html#tuple" title="tuple"><code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></a> containing
|
|||
|
conformable elements. Arrays are returned as
|
|||
|
<a class="reference internal" href="stdtypes.html#list" title="list"><code class="xref py py-class docutils literal notranslate"><span class="pre">lists</span></code></a>.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">struct</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>. Keys must be strings, values may be
|
|||
|
any conformable type. Objects of user-defined
|
|||
|
classes can be passed in; only their
|
|||
|
<a class="reference internal" href="stdtypes.html#object.__dict__" title="object.__dict__"><code class="xref py py-attr docutils literal notranslate"><span class="pre">__dict__</span></code></a> attribute is transmitted.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">dateTime.iso8601</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="#xmlrpc.client.DateTime" title="xmlrpc.client.DateTime"><code class="xref py py-class docutils literal notranslate"><span class="pre">DateTime</span></code></a> or <a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a>.
|
|||
|
Returned type depends on values of
|
|||
|
<em>use_builtin_types</em> and <em>use_datetime</em> flags.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">base64</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="#xmlrpc.client.Binary" title="xmlrpc.client.Binary"><code class="xref py py-class docutils literal notranslate"><span class="pre">Binary</span></code></a>, <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> or
|
|||
|
<a class="reference internal" href="stdtypes.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytearray</span></code></a>. Returned type depends on the
|
|||
|
value of the <em>use_builtin_types</em> flag.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">nil</span></code></p></td>
|
|||
|
<td><p>The <code class="docutils literal notranslate"><span class="pre">None</span></code> constant. Passing is allowed only if
|
|||
|
<em>allow_none</em> is true.</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">bigdecimal</span></code></p></td>
|
|||
|
<td><p><a class="reference internal" href="decimal.html#decimal.Decimal" title="decimal.Decimal"><code class="xref py py-class docutils literal notranslate"><span class="pre">decimal.Decimal</span></code></a>. Returned type only.</p></td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
<p>This is the full set of data types supported by XML-RPC. Method calls may also
|
|||
|
raise a special <a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Fault</span></code></a> instance, used to signal XML-RPC server errors, or
|
|||
|
<a class="reference internal" href="#xmlrpc.client.ProtocolError" title="xmlrpc.client.ProtocolError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ProtocolError</span></code></a> used to signal an error in the HTTP/HTTPS transport layer.
|
|||
|
Both <a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Fault</span></code></a> and <a class="reference internal" href="#xmlrpc.client.ProtocolError" title="xmlrpc.client.ProtocolError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ProtocolError</span></code></a> derive from a base class called
|
|||
|
<code class="xref py py-exc docutils literal notranslate"><span class="pre">Error</span></code>. Note that the xmlrpc client module currently does not marshal
|
|||
|
instances of subclasses of built-in types.</p>
|
|||
|
<p>When passing strings, characters special to XML such as <code class="docutils literal notranslate"><span class="pre"><</span></code>, <code class="docutils literal notranslate"><span class="pre">></span></code>, and <code class="docutils literal notranslate"><span class="pre">&</span></code>
|
|||
|
will be automatically escaped. However, it’s the caller’s responsibility to
|
|||
|
ensure that the string is free of characters that aren’t allowed in XML, such as
|
|||
|
the control characters with ASCII values between 0 and 31 (except, of course,
|
|||
|
tab, newline and carriage return); failing to do this will result in an XML-RPC
|
|||
|
request that isn’t well-formed XML. If you have to pass arbitrary bytes
|
|||
|
via XML-RPC, use <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> or <a class="reference internal" href="stdtypes.html#bytearray" title="bytearray"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytearray</span></code></a> classes or the
|
|||
|
<a class="reference internal" href="#xmlrpc.client.Binary" title="xmlrpc.client.Binary"><code class="xref py py-class docutils literal notranslate"><span class="pre">Binary</span></code></a> wrapper class described below.</p>
|
|||
|
<p><code class="xref py py-class docutils literal notranslate"><span class="pre">Server</span></code> is retained as an alias for <a class="reference internal" href="#xmlrpc.client.ServerProxy" title="xmlrpc.client.ServerProxy"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerProxy</span></code></a> for backwards
|
|||
|
compatibility. New code should use <a class="reference internal" href="#xmlrpc.client.ServerProxy" title="xmlrpc.client.ServerProxy"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerProxy</span></code></a>.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Added the <em>context</em> argument.</p>
|
|||
|
</div>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.6: </span>Added support of type tags with prefixes (e.g. <code class="docutils literal notranslate"><span class="pre">ex:nil</span></code>).
|
|||
|
Added support of unmarshalling additional types used by Apache XML-RPC
|
|||
|
implementation for numerics: <code class="docutils literal notranslate"><span class="pre">i1</span></code>, <code class="docutils literal notranslate"><span class="pre">i2</span></code>, <code class="docutils literal notranslate"><span class="pre">i8</span></code>, <code class="docutils literal notranslate"><span class="pre">biginteger</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">float</span></code> and <code class="docutils literal notranslate"><span class="pre">bigdecimal</span></code>.
|
|||
|
See <a class="reference external" href="http://ws.apache.org/xmlrpc/types.html">http://ws.apache.org/xmlrpc/types.html</a> for a description.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<div class="admonition seealso">
|
|||
|
<p class="admonition-title">See also</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt><a class="reference external" href="http://www.tldp.org/HOWTO/XML-RPC-HOWTO/index.html">XML-RPC HOWTO</a></dt><dd><p>A good description of XML-RPC operation and client software in several languages.
|
|||
|
Contains pretty much everything an XML-RPC client developer needs to know.</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="http://xmlrpc-c.sourceforge.net/introspection.html">XML-RPC Introspection</a></dt><dd><p>Describes the XML-RPC protocol extension for introspection.</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="http://xmlrpc.scripting.com/spec.html">XML-RPC Specification</a></dt><dd><p>The official specification.</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="http://effbot.org/zone/xmlrpc-errata.htm">Unofficial XML-RPC Errata</a></dt><dd><p>Fredrik Lundh’s “unofficial errata, intended to clarify certain
|
|||
|
details in the XML-RPC specification, as well as hint at
|
|||
|
‘best practices’ to use when designing your own XML-RPC
|
|||
|
implementations.”</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
<div class="section" id="serverproxy-objects">
|
|||
|
<span id="id1"></span><h2>ServerProxy Objects<a class="headerlink" href="#serverproxy-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>A <a class="reference internal" href="#xmlrpc.client.ServerProxy" title="xmlrpc.client.ServerProxy"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerProxy</span></code></a> instance has a method corresponding to each remote
|
|||
|
procedure call accepted by the XML-RPC server. Calling the method performs an
|
|||
|
RPC, dispatched by both name and argument signature (e.g. the same method name
|
|||
|
can be overloaded with multiple argument signatures). The RPC finishes by
|
|||
|
returning a value, which may be either returned data in a conformant type or a
|
|||
|
<a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-class docutils literal notranslate"><span class="pre">Fault</span></code></a> or <a class="reference internal" href="#xmlrpc.client.ProtocolError" title="xmlrpc.client.ProtocolError"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProtocolError</span></code></a> object indicating an error.</p>
|
|||
|
<p>Servers that support the XML introspection API support some common methods
|
|||
|
grouped under the reserved <code class="xref py py-attr docutils literal notranslate"><span class="pre">system</span></code> attribute:</p>
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.ServerProxy.system.listMethods">
|
|||
|
<code class="descclassname">ServerProxy.system.</code><code class="descname">listMethods</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.ServerProxy.system.listMethods" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This method returns a list of strings, one for each (non-system) method
|
|||
|
supported by the XML-RPC server.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.ServerProxy.system.methodSignature">
|
|||
|
<code class="descclassname">ServerProxy.system.</code><code class="descname">methodSignature</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.ServerProxy.system.methodSignature" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This method takes one parameter, the name of a method implemented by the XML-RPC
|
|||
|
server. It returns an array of possible signatures for this method. A signature
|
|||
|
is an array of types. The first of these types is the return type of the method,
|
|||
|
the rest are parameters.</p>
|
|||
|
<p>Because multiple signatures (ie. overloading) is permitted, this method returns
|
|||
|
a list of signatures rather than a singleton.</p>
|
|||
|
<p>Signatures themselves are restricted to the top level parameters expected by a
|
|||
|
method. For instance if a method expects one array of structs as a parameter,
|
|||
|
and it returns a string, its signature is simply “string, array”. If it expects
|
|||
|
three integers and returns a string, its signature is “string, int, int, int”.</p>
|
|||
|
<p>If no signature is defined for the method, a non-array value is returned. In
|
|||
|
Python this means that the type of the returned value will be something other
|
|||
|
than list.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.ServerProxy.system.methodHelp">
|
|||
|
<code class="descclassname">ServerProxy.system.</code><code class="descname">methodHelp</code><span class="sig-paren">(</span><em>name</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.ServerProxy.system.methodHelp" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This method takes one parameter, the name of a method implemented by the XML-RPC
|
|||
|
server. It returns a documentation string describing the use of that method. If
|
|||
|
no such string is available, an empty string is returned. The documentation
|
|||
|
string may contain HTML markup.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5: </span>Instances of <a class="reference internal" href="#xmlrpc.client.ServerProxy" title="xmlrpc.client.ServerProxy"><code class="xref py py-class docutils literal notranslate"><span class="pre">ServerProxy</span></code></a> support the <a class="reference internal" href="../glossary.html#term-context-manager"><span class="xref std std-term">context manager</span></a> protocol
|
|||
|
for closing the underlying transport.</p>
|
|||
|
</div>
|
|||
|
<p>A working example follows. The server code:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xmlrpc.server</span> <span class="k">import</span> <span class="n">SimpleXMLRPCServer</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">is_even</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">n</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span>
|
|||
|
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">SimpleXMLRPCServer</span><span class="p">((</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">8000</span><span class="p">))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listening on port 8000..."</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">is_even</span><span class="p">,</span> <span class="s2">"is_even"</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The client code for the preceding server:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="k">with</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://localhost:8000/"</span><span class="p">)</span> <span class="k">as</span> <span class="n">proxy</span><span class="p">:</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"3 is even: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">proxy</span><span class="o">.</span><span class="n">is_even</span><span class="p">(</span><span class="mi">3</span><span class="p">)))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"100 is even: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">proxy</span><span class="o">.</span><span class="n">is_even</span><span class="p">(</span><span class="mi">100</span><span class="p">)))</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="datetime-objects">
|
|||
|
<span id="id2"></span><h2>DateTime Objects<a class="headerlink" href="#datetime-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.DateTime">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">DateTime</code><a class="headerlink" href="#xmlrpc.client.DateTime" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This class may be initialized with seconds since the epoch, a time
|
|||
|
tuple, an ISO 8601 time/date string, or a <a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a>
|
|||
|
instance. It has the following methods, supported mainly for internal
|
|||
|
use by the marshalling/unmarshalling code:</p>
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.DateTime.decode">
|
|||
|
<code class="descname">decode</code><span class="sig-paren">(</span><em>string</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.DateTime.decode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Accept a string as the instance’s new time value.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.DateTime.encode">
|
|||
|
<code class="descname">encode</code><span class="sig-paren">(</span><em>out</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.DateTime.encode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Write the XML-RPC encoding of this <a class="reference internal" href="#xmlrpc.client.DateTime" title="xmlrpc.client.DateTime"><code class="xref py py-class docutils literal notranslate"><span class="pre">DateTime</span></code></a> item to the <em>out</em> stream
|
|||
|
object.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>It also supports certain of Python’s built-in operators through rich comparison
|
|||
|
and <a class="reference internal" href="../reference/datamodel.html#object.__repr__" title="object.__repr__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__repr__()</span></code></a> methods.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>A working example follows. The server code:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">datetime</span>
|
|||
|
<span class="kn">from</span> <span class="nn">xmlrpc.server</span> <span class="k">import</span> <span class="n">SimpleXMLRPCServer</span>
|
|||
|
<span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">today</span><span class="p">():</span>
|
|||
|
<span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
|
|||
|
<span class="k">return</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">DateTime</span><span class="p">(</span><span class="n">today</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">SimpleXMLRPCServer</span><span class="p">((</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">8000</span><span class="p">))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listening on port 8000..."</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">today</span><span class="p">,</span> <span class="s2">"today"</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The client code for the preceding server:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
<span class="kn">import</span> <span class="nn">datetime</span>
|
|||
|
|
|||
|
<span class="n">proxy</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://localhost:8000/"</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="n">today</span> <span class="o">=</span> <span class="n">proxy</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
|
|||
|
<span class="c1"># convert the ISO8601 string to a datetime object</span>
|
|||
|
<span class="n">converted</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strptime</span><span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">T%H:%M:%S"</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Today: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">converted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%d</span><span class="s2">.%m.%Y, %H:%M"</span><span class="p">))</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="binary-objects">
|
|||
|
<span id="id3"></span><h2>Binary Objects<a class="headerlink" href="#binary-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.Binary">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">Binary</code><a class="headerlink" href="#xmlrpc.client.Binary" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>This class may be initialized from bytes data (which may include NULs). The
|
|||
|
primary access to the content of a <a class="reference internal" href="#xmlrpc.client.Binary" title="xmlrpc.client.Binary"><code class="xref py py-class docutils literal notranslate"><span class="pre">Binary</span></code></a> object is provided by an
|
|||
|
attribute:</p>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.Binary.data">
|
|||
|
<code class="descname">data</code><a class="headerlink" href="#xmlrpc.client.Binary.data" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The binary data encapsulated by the <a class="reference internal" href="#xmlrpc.client.Binary" title="xmlrpc.client.Binary"><code class="xref py py-class docutils literal notranslate"><span class="pre">Binary</span></code></a> instance. The data is
|
|||
|
provided as a <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> object.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p><a class="reference internal" href="#xmlrpc.client.Binary" title="xmlrpc.client.Binary"><code class="xref py py-class docutils literal notranslate"><span class="pre">Binary</span></code></a> objects have the following methods, supported mainly for
|
|||
|
internal use by the marshalling/unmarshalling code:</p>
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.Binary.decode">
|
|||
|
<code class="descname">decode</code><span class="sig-paren">(</span><em>bytes</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.Binary.decode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Accept a base64 <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> object and decode it as the instance’s new data.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="method">
|
|||
|
<dt id="xmlrpc.client.Binary.encode">
|
|||
|
<code class="descname">encode</code><span class="sig-paren">(</span><em>out</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.Binary.encode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Write the XML-RPC base 64 encoding of this binary item to the <em>out</em> stream object.</p>
|
|||
|
<p>The encoded data will have newlines every 76 characters as per
|
|||
|
<span class="target" id="index-0"></span><a class="rfc reference external" href="https://tools.ietf.org/html/rfc2045.html#section-6.8"><strong>RFC 2045 section 6.8</strong></a>,
|
|||
|
which was the de facto standard base64 specification when the
|
|||
|
XML-RPC spec was written.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>It also supports certain of Python’s built-in operators through <a class="reference internal" href="../reference/datamodel.html#object.__eq__" title="object.__eq__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__eq__()</span></code></a>
|
|||
|
and <a class="reference internal" href="../reference/datamodel.html#object.__ne__" title="object.__ne__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__ne__()</span></code></a> methods.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>Example usage of the binary objects. We’re going to transfer an image over
|
|||
|
XMLRPC:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xmlrpc.server</span> <span class="k">import</span> <span class="n">SimpleXMLRPCServer</span>
|
|||
|
<span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">python_logo</span><span class="p">():</span>
|
|||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"python_logo.jpg"</span><span class="p">,</span> <span class="s2">"rb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">handle</span><span class="p">:</span>
|
|||
|
<span class="k">return</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">Binary</span><span class="p">(</span><span class="n">handle</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
|
|||
|
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">SimpleXMLRPCServer</span><span class="p">((</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">8000</span><span class="p">))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listening on port 8000..."</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">python_logo</span><span class="p">,</span> <span class="s1">'python_logo'</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The client gets the image and saves it to a file:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="n">proxy</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://localhost:8000/"</span><span class="p">)</span>
|
|||
|
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"fetched_python_logo.jpg"</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">handle</span><span class="p">:</span>
|
|||
|
<span class="n">handle</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">proxy</span><span class="o">.</span><span class="n">python_logo</span><span class="p">()</span><span class="o">.</span><span class="n">data</span><span class="p">)</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="fault-objects">
|
|||
|
<span id="id4"></span><h2>Fault Objects<a class="headerlink" href="#fault-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.Fault">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">Fault</code><a class="headerlink" href="#xmlrpc.client.Fault" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A <a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-class docutils literal notranslate"><span class="pre">Fault</span></code></a> object encapsulates the content of an XML-RPC fault tag. Fault
|
|||
|
objects have the following attributes:</p>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.Fault.faultCode">
|
|||
|
<code class="descname">faultCode</code><a class="headerlink" href="#xmlrpc.client.Fault.faultCode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A string indicating the fault type.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.Fault.faultString">
|
|||
|
<code class="descname">faultString</code><a class="headerlink" href="#xmlrpc.client.Fault.faultString" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A string containing a diagnostic message associated with the fault.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>In the following example we’re going to intentionally cause a <a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Fault</span></code></a> by
|
|||
|
returning a complex type object. The server code:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xmlrpc.server</span> <span class="k">import</span> <span class="n">SimpleXMLRPCServer</span>
|
|||
|
|
|||
|
<span class="c1"># A marshalling error is going to occur because we're returning a</span>
|
|||
|
<span class="c1"># complex number</span>
|
|||
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span><span class="o">+</span><span class="mi">0</span><span class="n">j</span>
|
|||
|
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">SimpleXMLRPCServer</span><span class="p">((</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">8000</span><span class="p">))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listening on port 8000..."</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="s1">'add'</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The client code for the preceding server:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="n">proxy</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://localhost:8000/"</span><span class="p">)</span>
|
|||
|
<span class="k">try</span><span class="p">:</span>
|
|||
|
<span class="n">proxy</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
|||
|
<span class="k">except</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">Fault</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"A fault occurred"</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Fault code: </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">faultCode</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Fault string: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">faultString</span><span class="p">)</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="protocolerror-objects">
|
|||
|
<span id="protocol-error-objects"></span><h2>ProtocolError Objects<a class="headerlink" href="#protocolerror-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.ProtocolError">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">ProtocolError</code><a class="headerlink" href="#xmlrpc.client.ProtocolError" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A <a class="reference internal" href="#xmlrpc.client.ProtocolError" title="xmlrpc.client.ProtocolError"><code class="xref py py-class docutils literal notranslate"><span class="pre">ProtocolError</span></code></a> object describes a protocol error in the underlying
|
|||
|
transport layer (such as a 404 ‘not found’ error if the server named by the URI
|
|||
|
does not exist). It has the following attributes:</p>
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.ProtocolError.url">
|
|||
|
<code class="descname">url</code><a class="headerlink" href="#xmlrpc.client.ProtocolError.url" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The URI or URL that triggered the error.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.ProtocolError.errcode">
|
|||
|
<code class="descname">errcode</code><a class="headerlink" href="#xmlrpc.client.ProtocolError.errcode" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The error code.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.ProtocolError.errmsg">
|
|||
|
<code class="descname">errmsg</code><a class="headerlink" href="#xmlrpc.client.ProtocolError.errmsg" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>The error message or diagnostic string.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="attribute">
|
|||
|
<dt id="xmlrpc.client.ProtocolError.headers">
|
|||
|
<code class="descname">headers</code><a class="headerlink" href="#xmlrpc.client.ProtocolError.headers" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>A dict containing the headers of the HTTP/HTTPS request that triggered the
|
|||
|
error.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>In the following example we’re going to intentionally cause a <a class="reference internal" href="#xmlrpc.client.ProtocolError" title="xmlrpc.client.ProtocolError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ProtocolError</span></code></a>
|
|||
|
by providing an invalid URI:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="c1"># create a ServerProxy with a URI that doesn't respond to XMLRPC requests</span>
|
|||
|
<span class="n">proxy</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://google.com/"</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="k">try</span><span class="p">:</span>
|
|||
|
<span class="n">proxy</span><span class="o">.</span><span class="n">some_method</span><span class="p">()</span>
|
|||
|
<span class="k">except</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ProtocolError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"A protocol error occurred"</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"URL: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"HTTP/HTTPS headers: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">headers</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error code: </span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">errcode</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Error message: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">err</span><span class="o">.</span><span class="n">errmsg</span><span class="p">)</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="multicall-objects">
|
|||
|
<h2>MultiCall Objects<a class="headerlink" href="#multicall-objects" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>The <a class="reference internal" href="#xmlrpc.client.MultiCall" title="xmlrpc.client.MultiCall"><code class="xref py py-class docutils literal notranslate"><span class="pre">MultiCall</span></code></a> object provides a way to encapsulate multiple calls to a
|
|||
|
remote server into a single request <a class="footnote-reference brackets" href="#id6" id="id5">1</a>.</p>
|
|||
|
<dl class="class">
|
|||
|
<dt id="xmlrpc.client.MultiCall">
|
|||
|
<em class="property">class </em><code class="descclassname">xmlrpc.client.</code><code class="descname">MultiCall</code><span class="sig-paren">(</span><em>server</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.MultiCall" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Create an object used to boxcar method calls. <em>server</em> is the eventual target of
|
|||
|
the call. Calls can be made to the result object, but they will immediately
|
|||
|
return <code class="docutils literal notranslate"><span class="pre">None</span></code>, and only store the call name and parameters in the
|
|||
|
<a class="reference internal" href="#xmlrpc.client.MultiCall" title="xmlrpc.client.MultiCall"><code class="xref py py-class docutils literal notranslate"><span class="pre">MultiCall</span></code></a> object. Calling the object itself causes all stored calls to
|
|||
|
be transmitted as a single <code class="docutils literal notranslate"><span class="pre">system.multicall</span></code> request. The result of this call
|
|||
|
is a <a class="reference internal" href="../glossary.html#term-generator"><span class="xref std std-term">generator</span></a>; iterating over this generator yields the individual
|
|||
|
results.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<p>A usage example of this class follows. The server code:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">xmlrpc.server</span> <span class="k">import</span> <span class="n">SimpleXMLRPCServer</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">subtract</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">x</span> <span class="o">-</span> <span class="n">y</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">multiply</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">x</span> <span class="o">*</span> <span class="n">y</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">divide</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|||
|
<span class="k">return</span> <span class="n">x</span> <span class="o">//</span> <span class="n">y</span>
|
|||
|
|
|||
|
<span class="c1"># A simple server with simple arithmetic functions</span>
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">SimpleXMLRPCServer</span><span class="p">((</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">8000</span><span class="p">))</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Listening on port 8000..."</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_multicall_functions</span><span class="p">()</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">add</span><span class="p">,</span> <span class="s1">'add'</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">subtract</span><span class="p">,</span> <span class="s1">'subtract'</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">multiply</span><span class="p">,</span> <span class="s1">'multiply'</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">register_function</span><span class="p">(</span><span class="n">divide</span><span class="p">,</span> <span class="s1">'divide'</span><span class="p">)</span>
|
|||
|
<span class="n">server</span><span class="o">.</span><span class="n">serve_forever</span><span class="p">()</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The client code for the preceding server:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="n">proxy</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://localhost:8000/"</span><span class="p">)</span>
|
|||
|
<span class="n">multicall</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">MultiCall</span><span class="p">(</span><span class="n">proxy</span><span class="p">)</span>
|
|||
|
<span class="n">multicall</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
|||
|
<span class="n">multicall</span><span class="o">.</span><span class="n">subtract</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
|||
|
<span class="n">multicall</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
|||
|
<span class="n">multicall</span><span class="o">.</span><span class="n">divide</span><span class="p">(</span><span class="mi">7</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
|||
|
<span class="n">result</span> <span class="o">=</span> <span class="n">multicall</span><span class="p">()</span>
|
|||
|
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"7+3=</span><span class="si">%d</span><span class="s2">, 7-3=</span><span class="si">%d</span><span class="s2">, 7*3=</span><span class="si">%d</span><span class="s2">, 7//3=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">result</span><span class="p">))</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="convenience-functions">
|
|||
|
<h2>Convenience Functions<a class="headerlink" href="#convenience-functions" title="Permalink to this headline">¶</a></h2>
|
|||
|
<dl class="function">
|
|||
|
<dt id="xmlrpc.client.dumps">
|
|||
|
<code class="descclassname">xmlrpc.client.</code><code class="descname">dumps</code><span class="sig-paren">(</span><em>params</em>, <em>methodname=None</em>, <em>methodresponse=None</em>, <em>encoding=None</em>, <em>allow_none=False</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.dumps" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Convert <em>params</em> into an XML-RPC request. or into a response if <em>methodresponse</em>
|
|||
|
is true. <em>params</em> can be either a tuple of arguments or an instance of the
|
|||
|
<a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Fault</span></code></a> exception class. If <em>methodresponse</em> is true, only a single value
|
|||
|
can be returned, meaning that <em>params</em> must be of length 1. <em>encoding</em>, if
|
|||
|
supplied, is the encoding to use in the generated XML; the default is UTF-8.
|
|||
|
Python’s <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a> value cannot be used in standard XML-RPC; to allow using
|
|||
|
it via an extension, provide a true value for <em>allow_none</em>.</p>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
<dl class="function">
|
|||
|
<dt id="xmlrpc.client.loads">
|
|||
|
<code class="descclassname">xmlrpc.client.</code><code class="descname">loads</code><span class="sig-paren">(</span><em>data</em>, <em>use_datetime=False</em>, <em>use_builtin_types=False</em><span class="sig-paren">)</span><a class="headerlink" href="#xmlrpc.client.loads" title="Permalink to this definition">¶</a></dt>
|
|||
|
<dd><p>Convert an XML-RPC request or response into Python objects, a <code class="docutils literal notranslate"><span class="pre">(params,</span>
|
|||
|
<span class="pre">methodname)</span></code>. <em>params</em> is a tuple of argument; <em>methodname</em> is a string, or
|
|||
|
<code class="docutils literal notranslate"><span class="pre">None</span></code> if no method name is present in the packet. If the XML-RPC packet
|
|||
|
represents a fault condition, this function will raise a <a class="reference internal" href="#xmlrpc.client.Fault" title="xmlrpc.client.Fault"><code class="xref py py-exc docutils literal notranslate"><span class="pre">Fault</span></code></a> exception.
|
|||
|
The <em>use_builtin_types</em> flag can be used to cause date/time values to be
|
|||
|
presented as <a class="reference internal" href="datetime.html#datetime.datetime" title="datetime.datetime"><code class="xref py py-class docutils literal notranslate"><span class="pre">datetime.datetime</span></code></a> objects and binary data to be
|
|||
|
presented as <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> objects; this flag is false by default.</p>
|
|||
|
<p>The obsolete <em>use_datetime</em> flag is similar to <em>use_builtin_types</em> but it
|
|||
|
applies only to date/time values.</p>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.3: </span>The <em>use_builtin_types</em> flag was added.</p>
|
|||
|
</div>
|
|||
|
</dd></dl>
|
|||
|
|
|||
|
</div>
|
|||
|
<div class="section" id="example-of-client-usage">
|
|||
|
<span id="xmlrpc-client-example"></span><h2>Example of Client Usage<a class="headerlink" href="#example-of-client-usage" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># simple test program (from the XML-RPC specification)</span>
|
|||
|
<span class="kn">from</span> <span class="nn">xmlrpc.client</span> <span class="k">import</span> <span class="n">ServerProxy</span><span class="p">,</span> <span class="n">Error</span>
|
|||
|
|
|||
|
<span class="c1"># server = ServerProxy("http://localhost:8000") # local server</span>
|
|||
|
<span class="k">with</span> <span class="n">ServerProxy</span><span class="p">(</span><span class="s2">"http://betty.userland.com"</span><span class="p">)</span> <span class="k">as</span> <span class="n">proxy</span><span class="p">:</span>
|
|||
|
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="n">proxy</span><span class="p">)</span>
|
|||
|
|
|||
|
<span class="k">try</span><span class="p">:</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="n">proxy</span><span class="o">.</span><span class="n">examples</span><span class="o">.</span><span class="n">getStateName</span><span class="p">(</span><span class="mi">41</span><span class="p">))</span>
|
|||
|
<span class="k">except</span> <span class="n">Error</span> <span class="k">as</span> <span class="n">v</span><span class="p">:</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"ERROR"</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>To access an XML-RPC server through a HTTP proxy, you need to define a custom
|
|||
|
transport. The following example shows how:</p>
|
|||
|
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">http.client</span>
|
|||
|
<span class="kn">import</span> <span class="nn">xmlrpc.client</span>
|
|||
|
|
|||
|
<span class="k">class</span> <span class="nc">ProxiedTransport</span><span class="p">(</span><span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">Transport</span><span class="p">):</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">set_proxy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|||
|
<span class="bp">self</span><span class="o">.</span><span class="n">proxy</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span> <span class="n">port</span>
|
|||
|
<span class="bp">self</span><span class="o">.</span><span class="n">proxy_headers</span> <span class="o">=</span> <span class="n">headers</span>
|
|||
|
|
|||
|
<span class="k">def</span> <span class="nf">make_connection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">):</span>
|
|||
|
<span class="n">connection</span> <span class="o">=</span> <span class="n">http</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">proxy</span><span class="p">)</span>
|
|||
|
<span class="n">connection</span><span class="o">.</span><span class="n">set_tunnel</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">proxy_headers</span><span class="p">)</span>
|
|||
|
<span class="bp">self</span><span class="o">.</span><span class="n">_connection</span> <span class="o">=</span> <span class="n">host</span><span class="p">,</span> <span class="n">connection</span>
|
|||
|
<span class="k">return</span> <span class="n">connection</span>
|
|||
|
|
|||
|
<span class="n">transport</span> <span class="o">=</span> <span class="n">ProxiedTransport</span><span class="p">()</span>
|
|||
|
<span class="n">transport</span><span class="o">.</span><span class="n">set_proxy</span><span class="p">(</span><span class="s1">'proxy-server'</span><span class="p">,</span> <span class="mi">8080</span><span class="p">)</span>
|
|||
|
<span class="n">server</span> <span class="o">=</span> <span class="n">xmlrpc</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">ServerProxy</span><span class="p">(</span><span class="s1">'http://betty.userland.com'</span><span class="p">,</span> <span class="n">transport</span><span class="o">=</span><span class="n">transport</span><span class="p">)</span>
|
|||
|
<span class="nb">print</span><span class="p">(</span><span class="n">server</span><span class="o">.</span><span class="n">examples</span><span class="o">.</span><span class="n">getStateName</span><span class="p">(</span><span class="mi">41</span><span class="p">))</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="example-of-client-and-server-usage">
|
|||
|
<h2>Example of Client and Server Usage<a class="headerlink" href="#example-of-client-and-server-usage" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>See <a class="reference internal" href="xmlrpc.server.html#simplexmlrpcserver-example"><span class="std std-ref">SimpleXMLRPCServer Example</span></a>.</p>
|
|||
|
<p class="rubric">Footnotes</p>
|
|||
|
<dl class="footnote brackets">
|
|||
|
<dt class="label" id="id6"><span class="brackets"><a class="fn-backref" href="#id5">1</a></span></dt>
|
|||
|
<dd><p>This approach has been first presented in <a class="reference external" href="https://web.archive.org/web/20060624230303/http://www.xmlrpc.com/discuss/msgReader$1208?mode=topic">a discussion on xmlrpc.com</a>.</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|||
|
<div class="sphinxsidebarwrapper">
|
|||
|
<h3><a href="../contents.html">Table of Contents</a></h3>
|
|||
|
<ul>
|
|||
|
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc.client</span></code> — XML-RPC client access</a><ul>
|
|||
|
<li><a class="reference internal" href="#serverproxy-objects">ServerProxy Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#datetime-objects">DateTime Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#binary-objects">Binary Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#fault-objects">Fault Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#protocolerror-objects">ProtocolError Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#multicall-objects">MultiCall Objects</a></li>
|
|||
|
<li><a class="reference internal" href="#convenience-functions">Convenience Functions</a></li>
|
|||
|
<li><a class="reference internal" href="#example-of-client-usage">Example of Client Usage</a></li>
|
|||
|
<li><a class="reference internal" href="#example-of-client-and-server-usage">Example of Client and Server Usage</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<h4>Previous topic</h4>
|
|||
|
<p class="topless"><a href="xmlrpc.html"
|
|||
|
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc</span></code> — XMLRPC server and client modules</a></p>
|
|||
|
<h4>Next topic</h4>
|
|||
|
<p class="topless"><a href="xmlrpc.server.html"
|
|||
|
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">xmlrpc.server</span></code> — Basic XML-RPC servers</a></p>
|
|||
|
<div role="note" aria-label="source link">
|
|||
|
<h3>This Page</h3>
|
|||
|
<ul class="this-page-menu">
|
|||
|
<li><a href="../bugs.html">Report a Bug</a></li>
|
|||
|
<li>
|
|||
|
<a href="https://github.com/python/cpython/blob/3.7/Doc/library/xmlrpc.client.rst"
|
|||
|
rel="nofollow">Show Source
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="clearer"></div>
|
|||
|
</div>
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
>index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="xmlrpc.server.html" title="xmlrpc.server — Basic XML-RPC servers"
|
|||
|
>next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="xmlrpc.html" title="xmlrpc — XMLRPC server and client modules"
|
|||
|
>previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
|||
|
<li class="nav-item nav-item-2"><a href="internet.html" >Internet Protocols and Support</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div class="footer">
|
|||
|
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
|||
|
<br />
|
|||
|
The Python Software Foundation is a non-profit corporation.
|
|||
|
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
|||
|
<br />
|
|||
|
Last updated on Jul 13, 2019.
|
|||
|
<a href="../bugs.html">Found a bug</a>?
|
|||
|
<br />
|
|||
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
|||
|
</div>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|