#!/usr/bin/perl --
use strict;
use Data::Dumper;
use Getopt::Std;
use vars qw[%opts];
require RPC::XML;
require RPC::XML::Client;
require XML::Parser;
getopts( 'hedu:m:p:', \%opts );
$opts{'p'} ||= '3000';
$opts{'u'} ||= 'http://127.0.0.1:'.$opts{p}.'/rpc';
$opts{'m'} ||= 'echo.echo';
$opts{'h'} and die usage();
### ok, so we can't actually get this object *ANY OTHER*
### sodding way :(
{
local $^W;
my $code = XML::Parser::ExpatNB->can('parse_more');
*XML::Parser::ExpatNB::parse_more = sub {
my $obj = shift;
print $_[0].$/ if $main::opts{'d'};
return $code->( $obj, @_ );
}
}
my @args = $opts{'e'} ? eval "@ARGV" : @ARGV;
my $req = RPC::XML::request->new( $opts{'m'}, @args );
print $req->as_string, $/ if $opts{'d'};
print "\n\n-----------------Output-----------\n";
my $cli = RPC::XML::Client->new( $opts{'u'} );
my $resp = $cli->send_request( $req );
print ref $resp ? Dumper( $resp->value ) : "Error: $resp";
sub usage {
return qq[
Usage:
$0 [-d] [-e] [-p PORT] [-u URL] [-m METHOD] ARG, [ARG,...]
Does an xmlrpc call against an xmlrpc server,
giving you back the output.
Options:
-p Port number to connect to. Defaults to $opts{p}.
-u Full url to post to. Defaults to:
$opts{u}
-m Method call to execute. Defaults to $opts{m}
-d Enable debug mode. This prints the sent and
received xml.
-e Eval \@ARGV before providing it as input to the
server. This allows you to created more complicated
arguments, than the default simple list.
-h Show this usage message
Example:
$0 -p 1234 foo bar
$0 -m complicated.method -e '{ key => value }'
\n];
}