1322
Comment: commited from SeaPIG with permission of author
|
2627
converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
''The page contents below were copied with permission of author (BrianDorsey) from [http://www.seapig.org/DocXMLRPCServer SeaPig:DocXMLRPCServer]. I'd like to rework the page to fit the form of WorkingWithTime, RssLibraries, etc.,. See also: DocXmlRpcServer'' -- LionKimbro [[DateTime(2004-04-28T05:58:21Z)]] | #pragma section-numbers off = XML-RPC = |
Line 3: | Line 4: |
XML-RPC makes calling remote functions incredibly easy. | XML-RPC is a neat way to send messages across the Internet. |
Line 5: | Line 6: |
From http://www.xml-rpc.com: ''It's a spec and a set of implementations that allow software running on disparate operating systems, running in different environments to make procedure calls over the Internet. |
The neat thing about XML-RPC is that it transports ''native data structures''- you can ship off lists, strings, dictionaries, and numbers. |
Line 8: | Line 8: |
It's remote procedure calling using HTTP as the transport and XML as the encoding. XML-RPC is designed to be as simple as possible, while allowing complex data structures to be transmitted, processed and returned.'' | You can [[Wiki:XmlRpc|read more about it over on C2,]] or on [[http://www.xmlrpc.com/|the XML-RPC home page.]] |
Line 10: | Line 10: |
Here is a bit of sample code to call a procedure ''message'' (passing in the first argument) on a server listening on localhost, port 8000: |
== Sample Code == |
Line 14: | Line 13: |
# messageclient.py | import xmlrpclib |
Line 16: | Line 15: |
import xmlrpclib import sys |
XMLRPC_SERVER_URL = "http://www.python.org/cgi-bin/moinmoin/?action=xmlrpc" |
Line 19: | Line 17: |
if len(sys.argv) > 1: s = xmlrpclib.ServerProxy('http://localhost:8000') s.message(sys.argv[1]) |
pythoninfo = xmlrpclib.ServerProxy( XMLRPC_SERVER_URL ) allpages = pythoninfo.getAllPages() # this is the XML-RPC call |
Line 23: | Line 20: |
print ", ".join( allpages ) | |
Line 25: | Line 23: |
(also, see [http://www.python.org/doc/current/lib/xmlrpc-client-example.html this example] and the [http://www.python.org/doc/current/lib/module-xmlrpclib.html xmlrpclib documentation]) | This code calls the PythonInfo wiki, and receives the TitleIndex as a list. |
Line 27: | Line 25: |
== Message Format == If you can communicate strings, you can do XML-RPC. You could even do it by e-mail! Here's how to make your string: {{{ #!python import xmlrpclib func_name = "foo" arg_1 = "robot" arg_2 = { "some":1, "dict":2 } arg_3 = [1,2,3,4,5] call_string = xmlrpclib.dumps( (arg_1,arg_2,arg_3,), func_name ) }}} ...resulting in the following {{{call_string}}} value: {{{ <?xml version='1.0'?> <methodCall> <methodName>foo</methodName> <params> <param> <value><string>robot</string></value> </param> <param> <value><struct> <member> <name>dict</name> <value><int>2</int></value> </member> <member> <name>some</name> <value><int>1</int></value> </member> </struct></value> </param> <param> <value><array><data> <value><int>1</int></value> <value><int>2</int></value> <value><int>3</int></value> <value><int>4</int></value> <value><int>5</int></value> </data></array></value> </param> </params> </methodCall> }}} ...which can then be turned ''back'' into Python data: {{{ #!python call_data = xmlrpclib.loads( call_string ) }}} ...which then builds: {{{ (('robot', {'some': 1, 'dict': 2}, [1, 2, 3, 4, 5]), u'foo') }}} That is, the first item is the arguments tuple, and the second item is the name of the function. The capabilities are described under "Convenience Functions" in [[http://docs.python.org/lib/module-xmlrpclib.html|the xmlrpclib documentation.]] == See Also == * [[http://docs.python.org/lib/xmlrpc-client-example.html|official xmlrpclib example]] * [[http://docs.python.org/lib/module-xmlrpclib.html|xmlrpclib documentation]] * [[http://www.onlamp.com/pub/a/python/2001/01/17/xmlrpcserver.html|XML-RPC: It Works Both Ways (onlamp.com)]] * DocXmlRpcServer - class to help make an XML-RPC server * [[http://effbot.org/zone/xmlrpc-cgi.htm|Providing XML-RPC Services via CGI]] |
XML-RPC
XML-RPC is a neat way to send messages across the Internet.
The neat thing about XML-RPC is that it transports native data structures- you can ship off lists, strings, dictionaries, and numbers.
You can read more about it over on C2, or on the XML-RPC home page.
Sample Code
This code calls the PythonInfo wiki, and receives the TitleIndex as a list.
Message Format
If you can communicate strings, you can do XML-RPC. You could even do it by e-mail!
Here's how to make your string:
...resulting in the following call_string value:
<?xml version='1.0'?> <methodCall> <methodName>foo</methodName> <params> <param> <value><string>robot</string></value> </param> <param> <value><struct> <member> <name>dict</name> <value><int>2</int></value> </member> <member> <name>some</name> <value><int>1</int></value> </member> </struct></value> </param> <param> <value><array><data> <value><int>1</int></value> <value><int>2</int></value> <value><int>3</int></value> <value><int>4</int></value> <value><int>5</int></value> </data></array></value> </param> </params> </methodCall>
...which can then be turned back into Python data:
1 call_data = xmlrpclib.loads( call_string )
...which then builds:
(('robot', {'some': 1, 'dict': 2}, [1, 2, 3, 4, 5]), u'foo')
That is, the first item is the arguments tuple, and the second item is the name of the function.
The capabilities are described under "Convenience Functions" in the xmlrpclib documentation.
See Also
DocXmlRpcServer - class to help make an XML-RPC server