Differences between revisions 1 and 8 (spanning 7 versions)
Revision 1 as of 2004-04-28 05:58:21
Size: 1322
Editor: dsl254-010-130
Comment: commited from SeaPIG with permission of author
Revision 8 as of 2008-11-15 14:01:14
Size: 2627
Editor: localhost
Comment: 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

   1 import xmlrpclib
   2 
   3 XMLRPC_SERVER_URL = "http://www.python.org/cgi-bin/moinmoin/?action=xmlrpc"
   4 
   5 pythoninfo = xmlrpclib.ServerProxy( XMLRPC_SERVER_URL )
   6 allpages = pythoninfo.getAllPages() # this is the XML-RPC call
   7 
   8 print ", ".join( allpages )

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:

   1 import xmlrpclib
   2 
   3 func_name = "foo"
   4 arg_1 = "robot"
   5 arg_2 = { "some":1, "dict":2 }
   6 arg_3 = [1,2,3,4,5]
   7 
   8 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:

   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

XmlRpc (last edited 2018-02-28 14:58:40 by aurelien)

Unable to edit the page? See the FrontPage for instructions.