Writing an XML-RPC Client (Perl Cookbook, 2nd Edition)

## 18.12. Writing an XML-RPC Client

### 18.12.1. Problem

You want to write a client for an XML-RPC service.

### 18.12.2. Solution

Use the XMLRPC::Lite module from the SOAP-Lite distribution:

>     use XMLRPC::Lite;

>     $server = XMLRPC::Lite->proxy("http://server.example.com/path");
>     $result = $server->call('ClassName.handler', @ARGS);
>     die $call->faultstring if $call->fault;
>     print $call->result;

### 18.12.3. Discussion

A single XML-RPC server may run many services, differentiated by their method name: `ClassName.handler` corresponds to `ClassName->handler` on the server side; `A.B.method` corresponds to `A::B->method`; and a `call` to `handler` corresponds to `main->handler`.

The `proxy` is the actual URL of the server. If you're using a CGI server, the `proxy` method looks something like this:

>     $server->proxy("http://server.example.com/path/to/server.cgi")

There are three ways to invoke remote methods. The first way is to use the `call` method on your XMLRPC::Lite object. The first argument to `call` is the remote method name, and the remaining arguments are parameters for the remote method:

>     $returned = $server
>              -> call("getRecordByNumber", 12, { format => "CSV" })
>              -> result;

The second way to invoke a remote method is to call that method on the XMLRPC::Lite object. This works only when the remote method name isn't the same as a method provided by the XMLRPC::Lite object. For example:

>     $returned = $server
>              -> getRecordByNumber(12, { format => "CSV" })
>              -> result;

The last way to invoke a remote method is with autodispatch, turning unrequired function calls and method invocations in your Perl program into XML-RPC requests. Enable autodispatch with:

>     use XMLRPC::Lite +autodispatch =>
>       proxy => "http://server.example.com/path";

>     $returned = getRecordByNumber(12, { format => "CSV" });

A critical difference between autodispatch and the other styles is that autodispatch automatically decodes the result into a Perl value for you. When you use an XMLRPC::Lite object, you must explicitly invoke the `result` method to decode the XML-RPC response into a Perl value.

### 18.12.4. See Also

Recipe 18.11; Recipe 18.14

Copyright © 2003 O'Reilly & Associates. All rights reserved.