Search code examples
pythonxml-rpc

How to send a xml-rpc request in python?


I was just wondering, how would I be able to send a xml-rpc request in python? I know you can use xmlrpclib, but how do I send out a request in xml to access a function?

I would like to see the xml response.

So basically I would like to send the following as my request to the server:

<?xml version="1.0"?>
<methodCall>
  <methodName>print</methodName>
  <params>
    <param>
        <value><string>Hello World!</string></value>
    </param>
  </params>
</methodCall>

and get back the response


Solution

  • Here's a simple XML-RPC client in Python:

    import xmlrpclib
    
    s = xmlrpclib.ServerProxy('http://localhost:8000')
    print s.myfunction(2, 4)
    

    Works with this server:

    from SimpleXMLRPCServer import SimpleXMLRPCServer
    from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
    
    # Restrict to a particular path.
    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
    # Create server
    server = SimpleXMLRPCServer(("localhost", 8000),
                                requestHandler=RequestHandler)
    
    def myfunction(x, y):
        status = 1
        result = [5, 6, [4, 5]]
        return (status, result)
    server.register_function(myfunction)
    
    # Run the server's main loop
    server.serve_forever()
    

    To access the guts of xmlrpclib, i.e. looking at the raw XML requests and so on, look up the xmlrpclib.Transport class in the documentation.