2013-05-15 1 views
1

Я пытаюсь использовать модуль Perl RPC :: XML :: Client для обработки XMLRPC API из Dokuwiki. In another SO post, the XMLRPC API of Dokuwiki was suggested as a way to programmatically post pages..Вход в DokuWiki с использованием RPC в Perl :: XML :: Client (или поочередно, как я могу удаленно отправлять страницы в экземпляр DokuWiki)

Я не уверен, что я делаю неправильно, но я не могу войти в систему, используя этот код:

#!/bin/env perl 
package PostWiki; 

use 5.010; # Require at least Perl version 5.10 
use strict; # Must declare all variables before using them 
use warnings; # Emit helpful warnings 
use autodie; # Fatal exceptions for common unrecoverable errors (e.g. open) 

use RPC::XML::Client; 

my $client = RPC::XML::Client->new('http://example.com/wikiname/lib/exe/xmlrpc.php'); 
my $logged_on_ok = $client->send_request('dokuwiki.login','username','password'); 
my $res = $client->send_request('dokuwiki.getVersion'); 
print $res; 

Я получаю эту ошибку:

 
RPC::XML::Client::send_request: HTTP server error: Unauthorized 

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

У меня есть remoteuser, установленное на то же имя пользователя, что я использую для входа в wiki для внесения ручных изменений. (Для целей безопасности это не то же самое, что и пользователь-администратор).

У меня также есть securecookie unchecked, так как каждый может свободно просматривать сайт, хотя только некоторые могут его отредактировать. Но это также не сработало, когда я его проверил.

У меня нет доступа к самому серверу, кроме как через wiki, иначе я мог бы просто скопировать файлы на сервер.

ответ

1

(В идеале я хотел бы добавить комментарий, но я не хватает репутации еще, чтобы сделать это.)

XMLRPC DokuWiki, будет returns a 401-Unauthorized, если удаленный пользователь неизвестен. (это было бы 403-Запретный если пользователь известен, но не имеет достаточно прав)

Это может быть случай, в частности, если ваш модуль XMLRPC не имеет дело с печеньем, так как dokwiki.login relies on them

Я не знаю RPC :: XML :: Client, но быстрый поиск не показал, что он имеет дело с кукисами. Вы можете убедиться, что это так, или проверить, как с ними справиться.

В качестве альтернативы, если вы не застряли в perl, вы можете посмотреть на DokuJClient, java-клиент xmlrpc для Dokuwiki.

+0

Cookies сделали это! 'my $ client = RPC :: XML :: Client-> new ('http://example.com/wikiname/lib/exe/xmlrpc.php', useragent => [cookie_jar => {file =>" $ ENV {HOME} /. Cookies.txt "}],);' исправляет его. –

Смежные вопросы