XML-RPC и Континуум от Python / Perl - PullRequest
2 голосов
/ 20 января 2009

Кто-нибудь имел успех в получении данных через Xml-rpc, используя Python или Perl ...?

Я использую библиотеку Continumum.py:

#!/usr/bin/env python

from continuum import *

c = Continuum( "http://localhost:8080/continuum/xmlrpc" )

или

#!/usr/bin/perl

use Frontier::Client;

my $url = "http://dev.server.com:8080/continuum/xmlrpc";

my $client = RPC::XML::Client->new($url);

my $res = $client->send_request('system.listMethods');

print "   Response class = ".(ref $res)."\n";
print "   Response type = ".$res->type."\n";
print "   Response string = ".$res->as_string."\n";
print "   Response value = ".$res->value."\n";

Дает: No such handler: system.listMethods

Кто-нибудь был лучше ...?

Ответы [ 2 ]

1 голос
/ 31 января 2009

То, что вы описываете, не является частью клиентской библиотеки - вопрос в том, реализует ли сервер эти методы.

Я являюсь автором модуля RPC :: XML Perl, и в классе сервера, который я предоставляю, я также предоставляю реализацию базового API "самоанализа", который стал своего рода полустандартным на арене XML-RPC. Но даже в этом случае пользователи серверного класса могут не активировать API самоанализа.

Конечно, я не могу говорить с другими реализациями XML-RPC.

1 голос
/ 21 января 2009

Да ... с Perl.

Я использовал XML :: RPC . На самом деле я написал модуль CPAN WWW :: FreshMeat :: API , используя его для доступа к API XML-RPC Freshmeats, поэтому я знаю, что он работает хорошо!

Использование XML :: RPC с Freshmeat, вызовы "system. *" Работают для меня ....

use XML::RPC;
use Data::Dumper;

my $fm = XML::RPC->new( 'http://freshmeat.net/xmlrpc/' );

# need to put in your Freshmeat username/password here
my $session = $fm->call( 'login', { username => 'user', password => 'pass' });

my $x = $fm->call('system.listMethods');

say Dumper( $x );

дает мне ....

$VAR1 = [
        'system.listMethods',
        'system.methodHelp',
        'system.methodSignature',
        'system.describeMethods',
        'system.multiCall',
        'system.getCapabilities',
        'publish_release',
        'fetch_branch_list',
        'fetch_project_list',
        'fetch_available_licenses',
        'fetch_available_release_foci',
        'fetch_release',
        'login',
        'logout',
        'withdraw_release'
      ];

Надеюсь, это поможет.

...