blob: 3645b824d8641c1323ade0d0b93230e301787b22 [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.}
Fredrik Lundhe7c38d42002-10-19 20:22:56 +00005\moduleauthor{Fredrik Lundh}{fredrik@pythonware.com}
Eric S. Raymonde304bb92001-07-12 02:39:45 +00006\sectionauthor{Eric S. Raymond}{esr@snark.thyrsus.com}
7
Fred Drakeb184ae82005-01-19 03:39:17 +00008% Not everything is documented yet. It might be good to describe
Eric S. Raymonde304bb92001-07-12 02:39:45 +00009% 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{,
Andrew M. Kuchlingf8d0c072003-04-25 00:29:31 +000021 encoding\optional{, verbose\optional{,
Skip Montanaro174dd222005-05-14 20:54:16 +000022 allow_none\optional{, use_datetime}}}}}}
Skip Montanarodc8d4072002-03-14 17:35:25 +000023A \class{ServerProxy} instance is an object that manages communication
Eric S. Raymonde304bb92001-07-12 02:39:45 +000024with a remote XML-RPC server. The required first argument is a URI
25(Uniform Resource Indicator), and will normally be the URL of the
26server. The optional second argument is a transport factory instance;
27by default it is an internal \class{SafeTransport} instance for https:
28URLs and an internal HTTP \class{Transport} instance otherwise. The
29optional third argument is an encoding, by default UTF-8. The optional
Andrew M. Kuchlingf8d0c072003-04-25 00:29:31 +000030fourth argument is a debugging flag. If \var{allow_none} is true,
31the Python constant \code{None} will be translated into XML; the
32default behaviour is for \code{None} to raise a \exception{TypeError}.
33This is a commonly-used extension to the XML-RPC specification, but isn't
34supported by all clients and servers; see
Skip Montanaro3f8f6662005-03-21 19:39:16 +000035\url{http://ontosys.com/xml-rpc/extensions.php} for a description.
Skip Montanaro174dd222005-05-14 20:54:16 +000036The \var{use_datetime} flag can be used to cause date/time values to be
37presented as \class{\refmodule{datetime}.datetime} objects; this is false
38by default. \class{\refmodule{datetime}.datetime},
39\class{\refmodule{datetime}.date} and \class{\refmodule{datetime}.time}
40objects may be passed to calls. \class{\refmodule{datetime}.date} objects
41are converted with a time of ``00:00:00''.
42\class{\refmodule{datetime}.time} objects are converted using today's date.
Eric S. Raymonde304bb92001-07-12 02:39:45 +000043
Fredrik Lundh1303c7c2002-10-22 18:23:00 +000044Both the HTTP and HTTPS transports support the URL syntax extension for
Fredrik Lundh019bd4a2002-10-22 18:26:28 +000045HTTP Basic Authentication: \code{http://user:pass@host:port/path}. The
Fredrik Lundh1303c7c2002-10-22 18:23:00 +000046\code{user:pass} portion will be base64-encoded as an HTTP `Authorization'
47header, and sent to the remote server as part of the connection process
48when invoking an XML-RPC method. You only need to use this if the
49remote server requires a Basic Authentication user and password.
50
Eric S. Raymonde304bb92001-07-12 02:39:45 +000051The returned instance is a proxy object with methods that can be used
52to invoke corresponding RPC calls on the remote server. If the remote
53server supports the introspection API, the proxy can also be used to query
54the remote server for the methods it supports (service discovery) and
55fetch other server-associated metadata.
56
Skip Montanarodc8d4072002-03-14 17:35:25 +000057\class{ServerProxy} instance methods take Python basic types and objects as
Eric S. Raymonde304bb92001-07-12 02:39:45 +000058arguments and return Python basic types and classes. Types that are
59conformable (e.g. that can be marshalled through XML), include the
60following (and except where noted, they are unmarshalled as the same
61Python type):
62
63\begin{tableii}{l|l}{constant}{Name}{Meaning}
Fred Drake5ddf7ad2001-07-12 23:39:24 +000064 \lineii{boolean}{The \constant{True} and \constant{False} constants}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000065 \lineii{integers}{Pass in directly}
66 \lineii{floating-point numbers}{Pass in directly}
67 \lineii{strings}{Pass in directly}
68 \lineii{arrays}{Any Python sequence type containing conformable
Fred Drake5ddf7ad2001-07-12 23:39:24 +000069 elements. Arrays are returned as lists}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000070 \lineii{structures}{A Python dictionary. Keys must be strings,
Fred Drake5ddf7ad2001-07-12 23:39:24 +000071 values may be any conformable type.}
Skip Montanaro174dd222005-05-14 20:54:16 +000072 \lineii{dates}{in seconds since the epoch (pass in an instance of the
73 \class{DateTime} class) or a
74 \class{\refmodule{datetime}.datetime},
75 \class{\refmodule{datetime}.date} or
76 \class{\refmodule{datetime}.time} instance}
Fred Drake5ddf7ad2001-07-12 23:39:24 +000077 \lineii{binary data}{pass in an instance of the \class{Binary}
78 wrapper class}
Eric S. Raymonde304bb92001-07-12 02:39:45 +000079\end{tableii}
80
81This is the full set of data types supported by XML-RPC. Method calls
Fred Drake5ddf7ad2001-07-12 23:39:24 +000082may also raise a special \exception{Fault} instance, used to signal
83XML-RPC server errors, or \exception{ProtocolError} used to signal an
Thomas Wouters477c8d52006-05-27 19:21:47 +000084error in the HTTP/HTTPS transport layer. Both \exception{Fault} and
85\exception{ProtocolError} derive from a base class called
86\exception{Error}. Note that even though starting with Python 2.2 you
87can subclass builtin types, the xmlrpclib module currently does not
88marshal instances of such subclasses.
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +000089
90When passing strings, characters special to XML such as \samp{<},
91\samp{>}, and \samp{\&} will be automatically escaped. However, it's
92the caller's responsibility to ensure that the string is free of
93characters that aren't allowed in XML, such as the control characters
94with ASCII values between 0 and 31; failing to do this will result in
95an XML-RPC request that isn't well-formed XML. If you have to pass
96arbitrary strings via XML-RPC, use the \class{Binary} wrapper class
97described below.
98
Skip Montanarodc8d4072002-03-14 17:35:25 +000099\class{Server} is retained as an alias for \class{ServerProxy} for backwards
100compatibility. New code should use \class{ServerProxy}.
101
Skip Montanaro174dd222005-05-14 20:54:16 +0000102\versionchanged[The \var{use_datetime} flag was added]{2.5}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000103\end{classdesc}
104
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000105
106\begin{seealso}
Fred Drake3f207b62005-11-29 12:40:58 +0000107 \seetitle[http://www.tldp.org/HOWTO/XML-RPC-HOWTO/index.html]
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000108 {XML-RPC HOWTO}{A good description of XML operation and
109 client software in several languages. Contains pretty much
110 everything an XML-RPC client developer needs to know.}
111 \seetitle[http://xmlrpc-c.sourceforge.net/hacks.php]
Skip Montanaro174dd222005-05-14 20:54:16 +0000112 {XML-RPC Hacks page}{Extensions for various open-source
Raymond Hettinger68804312005-01-01 00:28:46 +0000113 libraries to support introspection and multicall.}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000114\end{seealso}
115
116
Skip Montanarodc8d4072002-03-14 17:35:25 +0000117\subsection{ServerProxy Objects \label{serverproxy-objects}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000118
Skip Montanarodc8d4072002-03-14 17:35:25 +0000119A \class{ServerProxy} instance has a method corresponding to
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000120each remote procedure call accepted by the XML-RPC server. Calling
121the method performs an RPC, dispatched by both name and argument
122signature (e.g. the same method name can be overloaded with multiple
123argument signatures). The RPC finishes by returning a value, which
124may be either returned data in a conformant type or a \class{Fault} or
125\class{ProtocolError} object indicating an error.
126
127Servers that support the XML introspection API support some common
128methods grouped under the reserved \member{system} member:
129
130\begin{methoddesc}{system.listMethods}{}
131This method returns a list of strings, one for each (non-system)
132method supported by the XML-RPC server.
133\end{methoddesc}
134
Fred Drake4124a0b2001-07-14 02:46:01 +0000135\begin{methoddesc}{system.methodSignature}{name}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000136This method takes one parameter, the name of a method implemented by
137the XML-RPC server.It returns an array of possible signatures for this
138method. A signature is an array of types. The first of these types is
139the return type of the method, the rest are parameters.
140
141Because multiple signatures (ie. overloading) is permitted, this method
142returns a list of signatures rather than a singleton.
143
144Signatures themselves are restricted to the top level parameters
145expected by a method. For instance if a method expects one array of
146structs as a parameter, and it returns a string, its signature is
147simply "string, array". If it expects three integers and returns a
148string, its signature is "string, int, int, int".
149
150If no signature is defined for the method, a non-array value is
151returned. In Python this means that the type of the returned
152value will be something other that list.
153\end{methoddesc}
154
155\begin{methoddesc}{system.methodHelp}{name}
156This method takes one parameter, the name of a method implemented by
157the XML-RPC server. It returns a documentation string describing the
158use of that method. If no such string is available, an empty string is
159returned. The documentation string may contain HTML markup.
160\end{methoddesc}
161
162Introspection methods are currently supported by servers written in
163PHP, C and Microsoft .NET. Partial introspection support is included
164in recent updates to UserLand Frontier. Introspection support for
Skip Montanaro174dd222005-05-14 20:54:16 +0000165Perl, Python and Java is available at the \ulink{XML-RPC
166Hacks}{http://xmlrpc-c.sourceforge.net/hacks.php} page.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000167
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000168
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000169\subsection{Boolean Objects \label{boolean-objects}}
170
171This class may be initialized from any Python value; the instance
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000172returned depends only on its truth value. It supports various Python
173operators through \method{__cmp__()}, \method{__repr__()},
174\method{__int__()}, and \method{__nonzero__()} methods, all
175implemented in the obvious ways.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000176
177It also has the following method, supported mainly for internal use by
178the unmarshalling code:
179
180\begin{methoddesc}{encode}{out}
181Write the XML-RPC encoding of this Boolean item to the out stream object.
182\end{methoddesc}
183
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000184
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000185\subsection{DateTime Objects \label{datetime-objects}}
186
Skip Montanaro174dd222005-05-14 20:54:16 +0000187This class may be initialized with seconds since the epoch, a time tuple, an
188ISO 8601 time/date string, or a {}\class{\refmodule{datetime}.datetime},
189{}\class{\refmodule{datetime}.date} or {}\class{\refmodule{datetime}.time}
190instance. It has the following methods, supported mainly for internal use
191by the marshalling/unmarshalling code:
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000192
193\begin{methoddesc}{decode}{string}
194Accept a string as the instance's new time value.
195\end{methoddesc}
196
197\begin{methoddesc}{encode}{out}
Skip Montanaro174dd222005-05-14 20:54:16 +0000198Write the XML-RPC encoding of this \class{DateTime} item to the
199\var{out} stream object.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000200\end{methoddesc}
201
202It also supports certain of Python's built-in operators through
Skip Montanaro174dd222005-05-14 20:54:16 +0000203\method{__cmp__()} and \method{__repr__()} methods.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000204
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000205
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000206\subsection{Binary Objects \label{binary-objects}}
207
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000208This class may be initialized from string data (which may include NULs).
Fred Drakebb066cf2004-05-12 03:07:27 +0000209The primary access to the content of a \class{Binary} object is
Fred Drake585775b2002-06-14 00:33:02 +0000210provided by an attribute:
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000211
Fred Drake585775b2002-06-14 00:33:02 +0000212\begin{memberdesc}[Binary]{data}
213The binary data encapsulated by the \class{Binary} instance. The data
214is provided as an 8-bit string.
215\end{memberdesc}
216
217\class{Binary} objects have the following methods, supported mainly
218for internal use by the marshalling/unmarshalling code:
219
220\begin{methoddesc}[Binary]{decode}{string}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000221Accept a base64 string and decode it as the instance's new data.
222\end{methoddesc}
223
Fred Drake585775b2002-06-14 00:33:02 +0000224\begin{methoddesc}[Binary]{encode}{out}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000225Write the XML-RPC base 64 encoding of this binary item to the out
226stream object.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000227\end{methoddesc}
228
229It also supports certain of Python's built-in operators through a
Johannes Gijsbersf4a70f32004-12-12 16:52:40 +0000230\method{__cmp__()} method.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000231
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000232
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000233\subsection{Fault Objects \label{fault-objects}}
234
235A \class{Fault} object encapsulates the content of an XML-RPC fault tag.
236Fault objects have the following members:
237
238\begin{memberdesc}{faultCode}
239A string indicating the fault type.
240\end{memberdesc}
241
242\begin{memberdesc}{faultString}
243A string containing a diagnostic message associated with the fault.
244\end{memberdesc}
245
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000246
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000247\subsection{ProtocolError Objects \label{protocol-error-objects}}
248
249A \class{ProtocolError} object describes a protocol error in the
250underlying transport layer (such as a 404 `not found' error if the
251server named by the URI does not exist). It has the following
252members:
253
254\begin{memberdesc}{url}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000255The URI or URL that triggered the error.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000256\end{memberdesc}
257
258\begin{memberdesc}{errcode}
259The error code.
260\end{memberdesc}
261
262\begin{memberdesc}{errmsg}
Andrew M. Kuchling10b3eac2002-03-08 17:46:02 +0000263The error message or diagnostic string.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000264\end{memberdesc}
265
266\begin{memberdesc}{headers}
267A string containing the headers of the HTTP/HTTPS request that
268triggered the error.
269\end{memberdesc}
270
Martin v. Löwis45394c22003-10-31 13:49:36 +0000271\subsection{MultiCall Objects}
272
273\versionadded{2.4}
274
Michael W. Hudson1baa2482004-08-07 17:39:35 +0000275In \url{http://www.xmlrpc.com/discuss/msgReader\%241208}, an approach
276is presented to encapsulate multiple calls to a remote server into a
277single request.
Martin v. Löwis45394c22003-10-31 13:49:36 +0000278
279\begin{classdesc}{MultiCall}{server}
280
281Create an object used to boxcar method calls. \var{server} is the
282eventual target of the call. Calls can be made to the result object,
283but they will immediately return \var{None}, and only store the
284call name and parameters in the \class{MultiCall} object. Calling
285the object itself causes all stored calls to be transmitted as
286a single \code{system.multicall} request. The result of this call
287is a generator; iterating over this generator yields the individual
288results.
289
290\end{classdesc}
291
292A usage example of this class is
293
294\begin{verbatim}
295multicall = MultiCall(server_proxy)
296multicall.add(2,3)
297multicall.get_address("Guido")
298add_result, address = multicall()
299\end{verbatim}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000300
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000301\subsection{Convenience Functions}
302
Fred Draked90f5092001-10-01 21:05:30 +0000303\begin{funcdesc}{boolean}{value}
304Convert any Python value to one of the XML-RPC Boolean constants,
305\code{True} or \code{False}.
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000306\end{funcdesc}
307
Andrew M. Kuchling38afcef2003-10-22 14:12:03 +0000308\begin{funcdesc}{dumps}{params\optional{, methodname\optional{,
309 methodresponse\optional{, encoding\optional{,
310 allow_none}}}}}
Andrew M. Kuchling38afcef2003-10-22 14:12:03 +0000311Convert \var{params} into an XML-RPC request.
312or into a response if \var{methodresponse} is true.
313\var{params} can be either a tuple of arguments or an instance of the
314\exception{Fault} exception class. If \var{methodresponse} is true,
315only a single value can be returned, meaning that \var{params} must be of length 1.
316\var{encoding}, if supplied, is the encoding to use in the generated
317XML; the default is UTF-8. Python's \constant{None} value cannot be
318used in standard XML-RPC; to allow using it via an extension,
319provide a true value for \var{allow_none}.
320\end{funcdesc}
321
Skip Montanaro174dd222005-05-14 20:54:16 +0000322\begin{funcdesc}{loads}{data\optional{, use_datetime}}
Andrew M. Kuchling38afcef2003-10-22 14:12:03 +0000323Convert an XML-RPC request or response into Python objects, a
324\code{(\var{params}, \var{methodname})}. \var{params} is a tuple of argument; \var{methodname}
325is a string, or \code{None} if no method name is present in the packet.
326If the XML-RPC packet represents a fault condition, this
327function will raise a \exception{Fault} exception.
Skip Montanaro174dd222005-05-14 20:54:16 +0000328The \var{use_datetime} flag can be used to cause date/time values to be
329presented as \class{\refmodule{datetime}.datetime} objects; this is false
330by default.
331Note that even if you call an XML-RPC method with
332\class{\refmodule{datetime}.date} or \class{\refmodule{datetime}.time}
333objects, they are converted to \class{DateTime} objects internally, so only
334{}\class{\refmodule{datetime}.datetime} objects will be returned.
335
336\versionchanged[The \var{use_datetime} flag was added]{2.5}
Andrew M. Kuchling38afcef2003-10-22 14:12:03 +0000337\end{funcdesc}
338
339
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000340
341\subsection{Example of Client Usage \label{xmlrpc-client-example}}
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000342
343\begin{verbatim}
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000344# simple test program (from the XML-RPC specification)
Thomas Wouters477c8d52006-05-27 19:21:47 +0000345from xmlrpclib import ServerProxy, Error
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000346
Skip Montanarodc8d4072002-03-14 17:35:25 +0000347# server = ServerProxy("http://localhost:8000") # local server
348server = ServerProxy("http://betty.userland.com")
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000349
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000350print server
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000351
Fred Drake5ddf7ad2001-07-12 23:39:24 +0000352try:
353 print server.examples.getStateName(41)
354except Error, v:
355 print "ERROR", v
Eric S. Raymonde304bb92001-07-12 02:39:45 +0000356\end{verbatim}
Andrew M. Kuchling432be362005-12-08 14:54:20 +0000357
358To access an XML-RPC server through a proxy, you need to define
359a custom transport. The following example,
360written by NoboNobo, % fill in original author's name if we ever learn it
361shows how:
362
363% Example taken from http://lowlife.jp/nobonobo/wiki/xmlrpcwithproxy.html
364\begin{verbatim}
365import xmlrpclib, httplib
366
367class ProxiedTransport(xmlrpclib.Transport):
368 def set_proxy(self, proxy):
369 self.proxy = proxy
370 def make_connection(self, host):
371 self.realhost = host
372 h = httplib.HTTP(self.proxy)
373 return h
374 def send_request(self, connection, handler, request_body):
375 connection.putrequest("POST", 'http://%s%s' % (self.realhost, handler))
376 def send_host(self, connection, host):
377 connection.putheader('Host', self.realhost)
378
379p = ProxiedTransport()
380p.set_proxy('proxy-server:8080')
381server = xmlrpclib.Server('http://time.xmlrpc.com/RPC2', transport=p)
382print server.currentTime.getCurrentTime()
383\end{verbatim}