blob: d8126e40720a3cc235dd20913e6152a3f8a809bd [file] [log] [blame]
Eric S. Raymonde304bb92001-07-12 02:39:45 +00001\section{\module{xmlrpclib} --- XML-RPC client access}
2
3\declaremodule{standard}{xmlrpclib}
4\modulesynopsis{XML-RPC client access.}
5\moduleauthor{Fredrik Lundh}{effbot@telia.com}
6\sectionauthor{Eric S. Raymond}{esr@snark.thyrsus.com}
7
8% Not everyting is documented yet. It might be good to describe
9% Marshaller, Unmarshaller, getparser, dumps, loads, and Transport.
10
11\versionadded{2.2}
12
13XML-RPC is a Remote Procedure Call method that uses XML passed via
14HTTP as a transport. With it, a client can call methods with
15parameters on a remote server (the server is named by a URI) and get back
16structured data. This module supports writing XML-RPC client code; it
17handles all the details of translating between conformable Python
18objects and XML on the wire.
19
Skip Montanarodc8d4072002-03-14 17:35:25 +000020\begin{classdesc}{ServerProxy}{uri\optional{, transport\optional{,
21 encoding\optional{, verbose}}}}
22A \class{ServerProxy} instance is an object that manages communication
Eric S. Raymonde304bb92001-07-12 02:39:45 +000023with a remote XML-RPC server. The required first argument is a URI
24(Uniform Resource Indicator), and will normally be the URL of the
25server. The optional second argument is a transport factory instance;
26by default it is an internal \class{SafeTransport} instance for https:
27URLs and an internal HTTP \class{Transport} instance otherwise. The
28optional third argument is an encoding, by default UTF-8. The optional
29fourth argument is a debugging flag.
30
31The returned instance is a proxy object with methods that can be used
32to invoke corresponding RPC calls on the remote server. If the remote
33server supports the introspection API, the proxy can also be used to query
34the remote server for the methods it supports (service discovery) and
35fetch other server-associated metadata.
36
Skip Montanarodc8d4072002-03-14 17:35:25 +000037\class{ServerProxy} instance methods take Python basic types and objects as
Eric S. Raymonde304bb92001-07-12 02:39:45 +000038arguments and return Python basic types and classes. Types that are
39conformable (e.g. that can be marshalled through XML), include the
40following (and except where noted, they are unmarshalled as the same
41Python type):
42
43\begin{tableii}{l|l}{constant}{Name}{Meaning}
Fred Drake5ddf7ad2001-07-12 23:39:24 +000044 \lineii{boolean}{The \constant{True} and \constant{False} constants}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000045 \lineii{integers}{Pass in directly}
46 \lineii{floating-point numbers}{Pass in directly}
47 \lineii{strings}{Pass in directly}
48 \lineii{arrays}{Any Python sequence type containing conformable
Fred Drake5ddf7ad2001-07-12 23:39:24 +000049 elements. Arrays are returned as lists}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000050 \lineii{structures}{A Python dictionary. Keys must be strings,
Fred Drake5ddf7ad2001-07-12 23:39:24 +000051 values may be any conformable type.}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000052 \lineii{dates}{in seconds since the epoch; pass in an instance of the
Fred Drake5ddf7ad2001-07-12 23:39:24 +000053 \class{DateTime} wrapper class}
54 \lineii{binary data}{pass in an instance of the \class{Binary}
55 wrapper class}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000056\end{tableii}
57
58This is the full set of data types supported by XML-RPC. Method calls
Fred Drake5ddf7ad2001-07-12 23:39:24 +000059may also raise a special \exception{Fault} instance, used to signal
60XML-RPC server errors, or \exception{ProtocolError} used to signal an
61error in the HTTP/HTTPS transport layer.
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +000062
63When passing strings, characters special to XML such as \samp{<},
64\samp{>}, and \samp{\&} will be automatically escaped. However, it's
65the caller's responsibility to ensure that the string is free of
66characters that aren't allowed in XML, such as the control characters
67with ASCII values between 0 and 31; failing to do this will result in
68an XML-RPC request that isn't well-formed XML. If you have to pass
69arbitrary strings via XML-RPC, use the \class{Binary} wrapper class
70described below.
71
Skip Montanarodc8d4072002-03-14 17:35:25 +000072\class{Server} is retained as an alias for \class{ServerProxy} for backwards
73compatibility. New code should use \class{ServerProxy}.
74
Eric S. Raymonde304bb92001-07-12 02:39:45 +000075\end{classdesc}
76
Fred Drake5ddf7ad2001-07-12 23:39:24 +000077
78\begin{seealso}
79 \seetitle[http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html]
80 {XML-RPC HOWTO}{A good description of XML operation and
81 client software in several languages. Contains pretty much
82 everything an XML-RPC client developer needs to know.}
83 \seetitle[http://xmlrpc-c.sourceforge.net/hacks.php]
84 {XML-RPC-Hacks page}{Extensions for various open-source
85 libraries to support instrospection and multicall.}
86\end{seealso}
87
88
Skip Montanarodc8d4072002-03-14 17:35:25 +000089\subsection{ServerProxy Objects \label{serverproxy-objects}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000090
Skip Montanarodc8d4072002-03-14 17:35:25 +000091A \class{ServerProxy} instance has a method corresponding to
Eric S. Raymonde304bb92001-07-12 02:39:45 +000092each remote procedure call accepted by the XML-RPC server. Calling
93the method performs an RPC, dispatched by both name and argument
94signature (e.g. the same method name can be overloaded with multiple
95argument signatures). The RPC finishes by returning a value, which
96may be either returned data in a conformant type or a \class{Fault} or
97\class{ProtocolError} object indicating an error.
98
99Servers that support the XML introspection API support some common
100methods grouped under the reserved \member{system} member:
101
102\begin{methoddesc}{system.listMethods}{}
103This method returns a list of strings, one for each (non-system)
104method supported by the XML-RPC server.
105\end{methoddesc}
106
Fred Drake4124a0b2001-07-14 02:46:01 +0000107\begin{methoddesc}{system.methodSignature}{name}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000108This method takes one parameter, the name of a method implemented by
109the XML-RPC server.It returns an array of possible signatures for this
110method. A signature is an array of types. The first of these types is
111the return type of the method, the rest are parameters.
112
113Because multiple signatures (ie. overloading) is permitted, this method
114returns a list of signatures rather than a singleton.
115
116Signatures themselves are restricted to the top level parameters
117expected by a method. For instance if a method expects one array of
118structs as a parameter, and it returns a string, its signature is
119simply "string, array". If it expects three integers and returns a
120string, its signature is "string, int, int, int".
121
122If no signature is defined for the method, a non-array value is
123returned. In Python this means that the type of the returned
124value will be something other that list.
125\end{methoddesc}
126
127\begin{methoddesc}{system.methodHelp}{name}
128This method takes one parameter, the name of a method implemented by
129the XML-RPC server. It returns a documentation string describing the
130use of that method. If no such string is available, an empty string is
131returned. The documentation string may contain HTML markup.
132\end{methoddesc}
133
134Introspection methods are currently supported by servers written in
135PHP, C and Microsoft .NET. Partial introspection support is included
136in recent updates to UserLand Frontier. Introspection support for
137Perl, Python and Java is available at the XML-RPC Hacks page.
138
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000139
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000140\subsection{Boolean Objects \label{boolean-objects}}
141
142This class may be initialized from any Python value; the instance
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000143returned depends only on its truth value. It supports various Python
144operators through \method{__cmp__()}, \method{__repr__()},
145\method{__int__()}, and \method{__nonzero__()} methods, all
146implemented in the obvious ways.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000147
148It also has the following method, supported mainly for internal use by
149the unmarshalling code:
150
151\begin{methoddesc}{encode}{out}
152Write the XML-RPC encoding of this Boolean item to the out stream object.
153\end{methoddesc}
154
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000155
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000156\subsection{DateTime Objects \label{datetime-objects}}
157
158This class may initialized from date in seconds since the epoch, a
159time tuple, or an ISO 8601 time/date string. It has the following
160methods, supported mainly for internal use by the
161marshalling/unmarshalling code:
162
163\begin{methoddesc}{decode}{string}
164Accept a string as the instance's new time value.
165\end{methoddesc}
166
167\begin{methoddesc}{encode}{out}
168Write the XML-RPC encoding of this DateTime item to the out stream object.
169\end{methoddesc}
170
171It also supports certain of Python's built-in operators through
172\method{_cmp__} and \method{__repr__} methods.
173
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000174
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000175\subsection{Binary Objects \label{binary-objects}}
176
177This class may initialized from string data (which may include NULs).
178It has the following methods, supported mainly for internal use by the
179marshalling/unmarshalling code:
180
181\begin{methoddesc}{decode}{string}
182Accept a base64 string and decode it as the instance's new data.
183\end{methoddesc}
184
185\begin{methoddesc}{encode}{out}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000186Write the XML-RPC base 64 encoding of this binary item to the out
187stream object.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000188\end{methoddesc}
189
190It also supports certain of Python's built-in operators through a
191\method{_cmp__} method.
192
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000193
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000194\subsection{Fault Objects \label{fault-objects}}
195
196A \class{Fault} object encapsulates the content of an XML-RPC fault tag.
197Fault objects have the following members:
198
199\begin{memberdesc}{faultCode}
200A string indicating the fault type.
201\end{memberdesc}
202
203\begin{memberdesc}{faultString}
204A string containing a diagnostic message associated with the fault.
205\end{memberdesc}
206
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000207
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000208\subsection{ProtocolError Objects \label{protocol-error-objects}}
209
210A \class{ProtocolError} object describes a protocol error in the
211underlying transport layer (such as a 404 `not found' error if the
212server named by the URI does not exist). It has the following
213members:
214
215\begin{memberdesc}{url}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000216The URI or URL that triggered the error.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000217\end{memberdesc}
218
219\begin{memberdesc}{errcode}
220The error code.
221\end{memberdesc}
222
223\begin{memberdesc}{errmsg}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000224The error message or diagnostic string.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000225\end{memberdesc}
226
227\begin{memberdesc}{headers}
228A string containing the headers of the HTTP/HTTPS request that
229triggered the error.
230\end{memberdesc}
231
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000232
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000233\subsection{Convenience Functions}
234
Fred Draked90f5092001-10-01 21:05:30 +0000235\begin{funcdesc}{boolean}{value}
236Convert any Python value to one of the XML-RPC Boolean constants,
237\code{True} or \code{False}.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000238\end{funcdesc}
239
240\begin{funcdesc}{binary}{data}
241Trivially convert any Python string to a \class{Binary} object.
242\end{funcdesc}
243
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000244
245\subsection{Example of Client Usage \label{xmlrpc-client-example}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000246
247\begin{verbatim}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000248# simple test program (from the XML-RPC specification)
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000249
Skip Montanarodc8d4072002-03-14 17:35:25 +0000250# server = ServerProxy("http://localhost:8000") # local server
251server = ServerProxy("http://betty.userland.com")
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000252
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000253print server
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000254
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000255try:
256 print server.examples.getStateName(41)
257except Error, v:
258 print "ERROR", v
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000259\end{verbatim}