source: vendor/python/2.5/Doc/lib/libsimplexmlrpc.tex

Last change on this file was 3225, checked in by bird, 18 years ago

Python 2.5

File size: 8.8 KB
Line 
1\section{\module{SimpleXMLRPCServer} ---
2 Basic XML-RPC server}
3
4\declaremodule{standard}{SimpleXMLRPCServer}
5\modulesynopsis{Basic XML-RPC server implementation.}
6\moduleauthor{Brian Quinlan}{brianq@activestate.com}
7\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
8
9\versionadded{2.2}
10
11The \module{SimpleXMLRPCServer} module provides a basic server
12framework for XML-RPC servers written in Python. Servers can either
13be free standing, using \class{SimpleXMLRPCServer}, or embedded in a
14CGI environment, using \class{CGIXMLRPCRequestHandler}.
15
16\begin{classdesc}{SimpleXMLRPCServer}{addr\optional{,
17 requestHandler\optional{,
18 logRequests\optional{allow_none\optional{, encoding}}}}}
19
20 Create a new server instance. This class
21 provides methods for registration of functions that can be called by
22 the XML-RPC protocol. The \var{requestHandler} parameter
23 should be a factory for request handler instances; it defaults to
24 \class{SimpleXMLRPCRequestHandler}. The \var{addr} and
25 \var{requestHandler} parameters are passed to the
26 \class{\refmodule{SocketServer}.TCPServer} constructor. If
27 \var{logRequests} is true (the default), requests will be logged;
28 setting this parameter to false will turn off logging.
29 The \var{allow_none} and \var{encoding} parameters are passed on to
30 \module{xmlrpclib} and control the XML-RPC responses that will be returned
31 from the server.
32 \versionchanged[The \var{allow_none} and \var{encoding} parameters were added]{2.5}
33\end{classdesc}
34
35\begin{classdesc}{CGIXMLRPCRequestHandler}{\optional{allow_none\optional{, encoding}}}
36 Create a new instance to handle XML-RPC requests in a CGI
37 environment.
38 The \var{allow_none} and \var{encoding} parameters are passed on to
39 \module{xmlrpclib} and control the XML-RPC responses that will be returned
40 from the server.
41 \versionadded{2.3}
42 \versionchanged[The \var{allow_none} and \var{encoding} parameters were added]{2.5}
43\end{classdesc}
44
45\begin{classdesc}{SimpleXMLRPCRequestHandler}{}
46 Create a new request handler instance. This request handler
47 supports \code{POST} requests and modifies logging so that the
48 \var{logRequests} parameter to the \class{SimpleXMLRPCServer}
49 constructor parameter is honored.
50\end{classdesc}
51
52
53\subsection{SimpleXMLRPCServer Objects \label{simple-xmlrpc-servers}}
54
55The \class{SimpleXMLRPCServer} class is based on
56\class{SocketServer.TCPServer} and provides a means of creating
57simple, stand alone XML-RPC servers.
58
59\begin{methoddesc}[SimpleXMLRPCServer]{register_function}{function\optional{,
60 name}}
61 Register a function that can respond to XML-RPC requests. If
62 \var{name} is given, it will be the method name associated with
63 \var{function}, otherwise \code{\var{function}.__name__} will be
64 used. \var{name} can be either a normal or Unicode string, and may
65 contain characters not legal in Python identifiers, including the
66 period character.
67\end{methoddesc}
68
69\begin{methoddesc}[SimpleXMLRPCServer]{register_instance}{instance\optional{,
70 allow_dotted_names}}
71 Register an object which is used to expose method names which have
72 not been registered using \method{register_function()}. If
73 \var{instance} contains a \method{_dispatch()} method, it is called
74 with the requested method name and the parameters from the request. Its
75 API is \code{def \method{_dispatch}(self, method, params)} (note that
76 \var{params} does not represent a variable argument list). If it calls an
77 underlying function to perform its task, that function is called as
78 \code{func(*params)}, expanding the parameter list.
79 The return value from \method{_dispatch()} is returned to the client as
80 the result. If
81 \var{instance} does not have a \method{_dispatch()} method, it is
82 searched for an attribute matching the name of the requested method.
83
84 If the optional \var{allow_dotted_names} argument is true and the
85 instance does not have a \method{_dispatch()} method, then
86 if the requested method name contains periods, each component of the
87 method name is searched for individually, with the effect that a
88 simple hierarchical search is performed. The value found from this
89 search is then called with the parameters from the request, and the
90 return value is passed back to the client.
91
92 \begin{notice}[warning]
93 Enabling the \var{allow_dotted_names} option allows intruders to access
94 your module's global variables and may allow intruders to execute
95 arbitrary code on your machine. Only use this option on a secure,
96 closed network.
97 \end{notice}
98
99 \versionchanged[\var{allow_dotted_names} was added to plug a security hole;
100 prior versions are insecure]{2.3.5, 2.4.1}
101
102\end{methoddesc}
103
104\begin{methoddesc}{register_introspection_functions}{}
105 Registers the XML-RPC introspection functions \code{system.listMethods},
106 \code{system.methodHelp} and \code{system.methodSignature}.
107 \versionadded{2.3}
108\end{methoddesc}
109
110\begin{methoddesc}{register_multicall_functions}{}
111 Registers the XML-RPC multicall function system.multicall.
112\end{methoddesc}
113
114\begin{memberdesc}[SimpleXMLRPCServer]{rpc_paths}
115An attribute value that must be a tuple listing valid path portions of
116the URL for receiving XML-RPC requests. Requests posted to other
117paths will result in a 404 ``no such page'' HTTP error. If this
118tuple is empty, all paths will be considered valid.
119The default value is \code{('/', '/RPC2')}.
120 \versionadded{2.5}
121\end{memberdesc}
122
123Example:
124
125\begin{verbatim}
126from SimpleXMLRPCServer import SimpleXMLRPCServer
127
128# Create server
129server = SimpleXMLRPCServer(("localhost", 8000))
130server.register_introspection_functions()
131
132# Register pow() function; this will use the value of
133# pow.__name__ as the name, which is just 'pow'.
134server.register_function(pow)
135
136# Register a function under a different name
137def adder_function(x,y):
138 return x + y
139server.register_function(adder_function, 'add')
140
141# Register an instance; all the methods of the instance are
142# published as XML-RPC methods (in this case, just 'div').
143class MyFuncs:
144 def div(self, x, y):
145 return x // y
146
147server.register_instance(MyFuncs())
148
149# Run the server's main loop
150server.serve_forever()
151\end{verbatim}
152
153The following client code will call the methods made available by
154the preceding server:
155
156\begin{verbatim}
157import xmlrpclib
158
159s = xmlrpclib.Server('http://localhost:8000')
160print s.pow(2,3) # Returns 2**3 = 8
161print s.add(2,3) # Returns 5
162print s.div(5,2) # Returns 5//2 = 2
163
164# Print list of available methods
165print s.system.listMethods()
166\end{verbatim}
167
168
169\subsection{CGIXMLRPCRequestHandler}
170
171The \class{CGIXMLRPCRequestHandler} class can be used to
172handle XML-RPC requests sent to Python CGI scripts.
173
174\begin{methoddesc}{register_function}{function\optional{, name}}
175Register a function that can respond to XML-RPC requests. If
176\var{name} is given, it will be the method name associated with
177function, otherwise \var{function.__name__} will be used. \var{name}
178can be either a normal or Unicode string, and may contain
179characters not legal in Python identifiers, including the period
180character.
181\end{methoddesc}
182
183\begin{methoddesc}{register_instance}{instance}
184Register an object which is used to expose method names
185which have not been registered using \method{register_function()}. If
186instance contains a \method{_dispatch()} method, it is called with the
187requested method name and the parameters from the
188request; the return value is returned to the client as the result.
189If instance does not have a \method{_dispatch()} method, it is searched
190for an attribute matching the name of the requested method; if
191the requested method name contains periods, each
192component of the method name is searched for individually,
193with the effect that a simple hierarchical search is performed.
194The value found from this search is then called with the
195parameters from the request, and the return value is passed
196back to the client.
197\end{methoddesc}
198
199\begin{methoddesc}{register_introspection_functions}{}
200Register the XML-RPC introspection functions
201\code{system.listMethods}, \code{system.methodHelp} and
202\code{system.methodSignature}.
203\end{methoddesc}
204
205\begin{methoddesc}{register_multicall_functions}{}
206Register the XML-RPC multicall function \code{system.multicall}.
207\end{methoddesc}
208
209\begin{methoddesc}{handle_request}{\optional{request_text = None}}
210Handle a XML-RPC request. If \var{request_text} is given, it
211should be the POST data provided by the HTTP server,
212otherwise the contents of stdin will be used.
213\end{methoddesc}
214
215Example:
216
217\begin{verbatim}
218class MyFuncs:
219 def div(self, x, y) : return x // y
220
221
222handler = CGIXMLRPCRequestHandler()
223handler.register_function(pow)
224handler.register_function(lambda x,y: x+y, 'add')
225handler.register_introspection_functions()
226handler.register_instance(MyFuncs())
227handler.handle_request()
228\end{verbatim}
Note: See TracBrowser for help on using the repository browser.