in reply to Re: Grappling with JSON::RPC::Client
in thread Grappling with JSON::RPC::Client

That was a hangover from a previous experiment with other Perl modules. Unsurprisingly 999.999.999.999 isn't a valid IP address, and the way JSON::RPC::Client appears to work is it checks the URI and goes on from there. When connecting to the valid IP it still gives me that hash error :-/

Replies are listed 'Best First'.
Re^3: Grappling with JSON::RPC::Client
by reenen (Acolyte) on Jan 20, 2010 at 18:23 UTC

    Sorry for the late reply here.

    Did a tcpdump on Zabbix 1.8 with this, and the result seems to indicate Zabbix uses JSON RPC 2.0 only:

    [{"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Request.", +"data":"JSON-rpc version is not specified."},"id":null},{"jsonrpc":"2 +.0","error":{"code":-32600,"message":"Inval id Request.","data":"Expacting JSON-rpc version 2.0, 1 is given ."},"i +d":"1"},{"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Re +quest.","data":"Expacting JSON-rpc version 2.0, u is given ."},"id":" +u"}

      It does not look like JSON::RPC::Client does 2.0, I found JSON::RPC::Common on CPAN which appears to, here is a code snippet for that:

      #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use JSON::RPC::Common::Marshal::HTTP; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $req_data = { jsonrpc => "2.0", method => "user.authenticate", id => "xxx", params => { user=>'yyy', password=>'zzz' }, }; my $req_obj = JSON::RPC::Common::Procedure::Call->inflate($req_data); my $m = JSON::RPC::Common::Marshal::HTTP->new; my $req = $m->call_to_request($req_obj); $req->uri('http://zabbix/api_jsonrpc.php'); my $res = $ua->request($req); my $res_obj = $m->response_to_result($res); print Dumper($res_obj);