blob: 0c25c027bbd08227bef1d56f86fe09a23da804bb [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
Skip Montanaro10acc8f2002-03-17 23:15:02 +000061error in the HTTP/HTTPS transport layer. Note that even though starting
62with Python 2.2 you can subclass builtin types, the xmlrpclib module
63currently does not marshal instances of such subclasses.
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +000064
65When passing strings, characters special to XML such as \samp{<},
66\samp{>}, and \samp{\&} will be automatically escaped. However, it's
67the caller's responsibility to ensure that the string is free of
68characters that aren't allowed in XML, such as the control characters
69with ASCII values between 0 and 31; failing to do this will result in
70an XML-RPC request that isn't well-formed XML. If you have to pass
71arbitrary strings via XML-RPC, use the \class{Binary} wrapper class
72described below.
73
Skip Montanarodc8d4072002-03-14 17:35:25 +000074\class{Server} is retained as an alias for \class{ServerProxy} for backwards
75compatibility. New code should use \class{ServerProxy}.
76
Eric S. Raymonde304bb92001-07-12 02:39:45 +000077\end{classdesc}
78
Fred Drake5ddf7ad2001-07-12 23:39:24 +000079
80\begin{seealso}
81 \seetitle[http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html]
82 {XML-RPC HOWTO}{A good description of XML operation and
83 client software in several languages. Contains pretty much
84 everything an XML-RPC client developer needs to know.}
85 \seetitle[http://xmlrpc-c.sourceforge.net/hacks.php]
86 {XML-RPC-Hacks page}{Extensions for various open-source
87 libraries to support instrospection and multicall.}
88\end{seealso}
89
90
Skip Montanarodc8d4072002-03-14 17:35:25 +000091\subsection{ServerProxy Objects \label{serverproxy-objects}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000092
Skip Montanarodc8d4072002-03-14 17:35:25 +000093A \class{ServerProxy} instance has a method corresponding to
Eric S. Raymonde304bb92001-07-12 02:39:45 +000094each remote procedure call accepted by the XML-RPC server. Calling
95the method performs an RPC, dispatched by both name and argument
96signature (e.g. the same method name can be overloaded with multiple
97argument signatures). The RPC finishes by returning a value, which
98may be either returned data in a conformant type or a \class{Fault} or
99\class{ProtocolError} object indicating an error.
100
101Servers that support the XML introspection API support some common
102methods grouped under the reserved \member{system} member:
103
104\begin{methoddesc}{system.listMethods}{}
105This method returns a list of strings, one for each (non-system)
106method supported by the XML-RPC server.
107\end{methoddesc}
108
Fred Drake4124a0b2001-07-14 02:46:01 +0000109\begin{methoddesc}{system.methodSignature}{name}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000110This method takes one parameter, the name of a method implemented by
111the XML-RPC server.It returns an array of possible signatures for this
112method. A signature is an array of types. The first of these types is
113the return type of the method, the rest are parameters.
114
115Because multiple signatures (ie. overloading) is permitted, this method
116returns a list of signatures rather than a singleton.
117
118Signatures themselves are restricted to the top level parameters
119expected by a method. For instance if a method expects one array of
120structs as a parameter, and it returns a string, its signature is
121simply "string, array". If it expects three integers and returns a
122string, its signature is "string, int, int, int".
123
124If no signature is defined for the method, a non-array value is
125returned. In Python this means that the type of the returned
126value will be something other that list.
127\end{methoddesc}
128
129\begin{methoddesc}{system.methodHelp}{name}
130This method takes one parameter, the name of a method implemented by
131the XML-RPC server. It returns a documentation string describing the
132use of that method. If no such string is available, an empty string is
133returned. The documentation string may contain HTML markup.
134\end{methoddesc}
135
136Introspection methods are currently supported by servers written in
137PHP, C and Microsoft .NET. Partial introspection support is included
138in recent updates to UserLand Frontier. Introspection support for
139Perl, Python and Java is available at the XML-RPC Hacks page.
140
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000141
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000142\subsection{Boolean Objects \label{boolean-objects}}
143
144This class may be initialized from any Python value; the instance
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000145returned depends only on its truth value. It supports various Python
146operators through \method{__cmp__()}, \method{__repr__()},
147\method{__int__()}, and \method{__nonzero__()} methods, all
148implemented in the obvious ways.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000149
150It also has the following method, supported mainly for internal use by
151the unmarshalling code:
152
153\begin{methoddesc}{encode}{out}
154Write the XML-RPC encoding of this Boolean item to the out stream object.
155\end{methoddesc}
156
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000157
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000158\subsection{DateTime Objects \label{datetime-objects}}
159
160This class may initialized from date in seconds since the epoch, a
161time tuple, or an ISO 8601 time/date string. It has the following
162methods, supported mainly for internal use by the
163marshalling/unmarshalling code:
164
165\begin{methoddesc}{decode}{string}
166Accept a string as the instance's new time value.
167\end{methoddesc}
168
169\begin{methoddesc}{encode}{out}
170Write the XML-RPC encoding of this DateTime item to the out stream object.
171\end{methoddesc}
172
173It also supports certain of Python's built-in operators through
174\method{_cmp__} and \method{__repr__} methods.
175
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000176
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000177\subsection{Binary Objects \label{binary-objects}}
178
179This class may initialized from string data (which may include NULs).
180It has the following methods, supported mainly for internal use by the
181marshalling/unmarshalling code:
182
183\begin{methoddesc}{decode}{string}
184Accept a base64 string and decode it as the instance's new data.
185\end{methoddesc}
186
187\begin{methoddesc}{encode}{out}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000188Write the XML-RPC base 64 encoding of this binary item to the out
189stream object.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000190\end{methoddesc}
191
192It also supports certain of Python's built-in operators through a
193\method{_cmp__} method.
194
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000195
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000196\subsection{Fault Objects \label{fault-objects}}
197
198A \class{Fault} object encapsulates the content of an XML-RPC fault tag.
199Fault objects have the following members:
200
201\begin{memberdesc}{faultCode}
202A string indicating the fault type.
203\end{memberdesc}
204
205\begin{memberdesc}{faultString}
206A string containing a diagnostic message associated with the fault.
207\end{memberdesc}
208
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000209
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000210\subsection{ProtocolError Objects \label{protocol-error-objects}}
211
212A \class{ProtocolError} object describes a protocol error in the
213underlying transport layer (such as a 404 `not found' error if the
214server named by the URI does not exist). It has the following
215members:
216
217\begin{memberdesc}{url}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000218The URI or URL that triggered the error.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000219\end{memberdesc}
220
221\begin{memberdesc}{errcode}
222The error code.
223\end{memberdesc}
224
225\begin{memberdesc}{errmsg}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000226The error message or diagnostic string.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000227\end{memberdesc}
228
229\begin{memberdesc}{headers}
230A string containing the headers of the HTTP/HTTPS request that
231triggered the error.
232\end{memberdesc}
233
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000234
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000235\subsection{Convenience Functions}
236
Fred Draked90f5092001-10-01 21:05:30 +0000237\begin{funcdesc}{boolean}{value}
238Convert any Python value to one of the XML-RPC Boolean constants,
239\code{True} or \code{False}.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000240\end{funcdesc}
241
242\begin{funcdesc}{binary}{data}
243Trivially convert any Python string to a \class{Binary} object.
244\end{funcdesc}
245
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000246
247\subsection{Example of Client Usage \label{xmlrpc-client-example}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000248
249\begin{verbatim}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000250# simple test program (from the XML-RPC specification)
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000251
Skip Montanarodc8d4072002-03-14 17:35:25 +0000252# server = ServerProxy("http://localhost:8000") # local server
253server = ServerProxy("http://betty.userland.com")
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000254
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000255print server
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000256
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000257try:
258 print server.examples.getStateName(41)
259except Error, v:
260 print "ERROR", v
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000261\end{verbatim}