DokuWiki

It's better when it's simple

User Tools

Site Tools


devel:xmlrpc:clients

This is an old revision of the document!


XML-RPC Api

Samples of Clients using the XML-RPC Api

Beside the simple clients listed below, there is also available:

Sample Java Client

A java client for Dokuwiki is available on github.

Example which displays the title of the wiki and the list of its pages:

import dw.xmlrpc.DokuJClient;
import dw.xmlrpc.Page;
 
public class Main {
  public static void main(String[] args) throws Exception{
    String url = "http://mywiki/lib/exe/xmlrpc.php";
    String user = "myUser";
    String pwd = "myPassword";
 
    DokuJClient client = new DokuJClient(url, user, pwd);
    System.out.println("Pages in the wiki " + client.getTitle() + " are:");
    for(Page page : client.getAllPages()){
      System.out.println(page.id());
    }
 
  }
}

Sample PHP Client

This simple example will pull the version information from the given DokuWiki.

  • You need to download and install the library XML-RPC for PHP for this example.
  • The URL of the DW-Server must be given without the procotol (http://).
<?php
include('lib/xmlrpc.inc');  // or whereever you have downloaded and put the XML-RPC for PHP libraries
 
// create a new client instance
$c = new xmlrpc_client('/lib/exe/xmlrpc.php', 'adminwiki.kreisbote.de', 80);
 
// enable debugging to see more infos :-) (well, not for production code)
$c->setDebug(1);
 
// create the XML message to send
$m = new xmlrpcmsg('dokuwiki.getVersion');
 
// send the message and wait for response
$r = $c->send($m);
if($r == false) die('error');
if(!$r->faultCode()){
    // seems good. Now do whatever you want with the data
    $v = php_xmlrpc_decode($r->value());
    echo "$v";
}
<?php
include('/lib/xmlrpc.inc');
 
$c = new xmlrpc_client('/lib/exe/xmlrpc.php', 'localhost', 80);
$c->setDebug = 1;
 
$m = new xmlrpcmsg('wiki.putAttachment');
$m->addParam(new xmlrpcval("file.png", "string"));
$m->addParam(new xmlrpcval("iVBORw0KGgoAAAANSUhEUgAAADAAAAAwC.....<base64 string here>...", "base64"));
$m->addParam(new xmlrpcval(array("ow" => new xmlrpcval(true, "boolean")), "struct"));
 
$r = $c->send($m);
if($r == false) die('foo!');
 
// Output the response object
// var_dump($r);
$r = $c->send($m);
 
if(!$r->faultCode()) {
    $v = php_xmlrpc_decode($r->value());
    echo $v;
} else {
    echo $r->faultString();
}
 
?>

DokuWiki has its own XML-RPC library which could also be used. A simple client using that library looks like this:

<?php
require_once('inc/init.php');
 
$client = new IXR_Client('http://localhost/devel/dokuwiki/lib/exe/xmlrpc.php');
$client->debug = 1; // enable for debugging
$client->query('dokuwiki.login','admin','pass');
$ok = $client->getResponse();
if($ok) {
   $client->query('wiki.getPage','wiki:syntax');
   echo $client->getResponse();
}

Sample Perl Client

Dokuwiki::RPC::XML::Client is simple dokuwiki client written on top of RPC::XML::Client, it comes with a CLI command you can use from shell.

you can also write RPC::XML::Client code directly following this simple example will pull the version information and the list of documents in the wiki namespace from the given Dokuwiki. It also lists all .png mediafiles from the same namespace and its child namespaces.

use strict;
use warnings;
use feature 'say';
use RPC::XML::Client;
use Data::Dumper;
 
my $client =
  RPC::XML::Client->new('https://www.example.com/wiki/lib/exe/xmlrpc.php');
 
my $res = $client->send_request('dokuwiki.getVersion');
say 'dokuwiki.getVersion = ' . $res->value;
 
my $namespace = 'wiki';
my $req =
  RPC::XML::request->new( 'dokuwiki.getPagelist',
    RPC::XML::string->new($namespace),
    RPC::XML::struct->new() );
$res = $client->send_request($req);
say "dokuwiki.getPagelist = \n" . Dumper $res->value;
 
 
# if given and >0 'depth' is relative to the searched namespace and is a maximum.
# setting 'hash' to 1 will put extra load on server.
$res = $client->send_request(
	RPC::XML::request->new( 'wiki.getAttachments',
		RPC::XML::string->new('$namespace'),
		RPC::XML::struct->new( {depth => 2, skipacl => 1, hash => 0, pattern => '/\.png$/' } )
	)
);
say "wiki.getAttachments = \n" . Dumper $res->value;

Sample Ruby Client

This simple example will pull the version information from the given Dokuwiki. No plugin required (in the Windows default package).

require "xmlrpc/client"
server = XMLRPC::Client.new( "localhost","/dokuwiki/lib/exe/xmlrpc.php")
begin
    puts server.call("dokuwiki.getVersion")
rescue XMLRPC::FaultException => e
    puts "Error:"
    puts e.faultCode
    puts e.faultString
end

This example demonstrates how to upload attachments:

require "xmlrpc/client"
server = XMLRPC::Client.new( "localhost","/dokuwiki/lib/exe/xmlrpc.php")
begin
    puts server.call("wiki.putAttachment", "wiki/example.png", XMLRPC::Base64.new(IO.read("/path/to/example.png")))
rescue XMLRPC::FaultException => e
    puts "Error:"
    puts e.faultCode
    puts e.faultString
end

Sample jQuery Client

var xml='<?xml version="1.0"?><methodCall><methodName>wiki.getRPCVersionSupported</methodName><params></params></methodCall>';
 $.ajax({
   url: "http://<your wiki>/wiki/lib/exe/xmlrpc.php",
   data: xml,
   contentType:"text/xml",
   type:"post",
   beforeSend: function (xhr) {
     xhr.setRequestHeader ("Authorization", "Basic " + btoa('username' + ":" + 'password'));
   },
 });

Python Module

A Python module for DokuWiki's XML-RPC API can be found at the Python package index and on GitHub.

Alternative: python-dokuwiki

Sample AutoIt3 Client

My AutoIt3 client is mainly a proof of concept:

#cs ----------------------------------------------------------------------------
 
 AutoIt Version: 3.2.12.1
 Author:         Hugo Bossard
 
 Script Function:
    XML-RPC sample client AutoIt3 script.
 
#ce ----------------------------------------------------------------------------
 
; this script uses the UDF WinHttp
#include "WinHTTP.au3"
 
; get the info from page 'wiki:syntax' using wiki.getPageInfo()
$Xml = '<?xml version="1.0"?>' 
$Xml = $Xml  & @CRLF & '<methodCall>'
$Xml = $Xml  & @CRLF & '<methodName>wiki.getPageInfo</methodName>'
$Xml = $Xml  & @CRLF & '<params>'
$Xml = $Xml  & @CRLF & '<param>' 
$Xml = $Xml  & @CRLF & '<value>'
$Xml = $Xml  & @CRLF & '<string>wiki:syntax</string>'
$Xml = $Xml  & @CRLF & '</value>'
$Xml = $Xml  & @CRLF & '</param>' 
$Xml = $Xml  & @CRLF & '</params>' 
$Xml = $Xml  & @CRLF & '</methodCall>'
$XmlSize = StringLen($Xml)
 
; initializes the use of WinHTTP functions and returns a WinHTTP-session handle.
$hw_open = _WinHttpOpen()
 
; creates a HTTP request handle to a lokal DokuWikiStick installation on port 8800
$hw_connect = _WinHttpConnect($hw_open, "localhost", 8800)
 
; creates a HTTP request handle
$h_openRequest = _WinHttpOpenRequest($hw_connect, "POST", "/lib/exe/xmlrpc.php", "/RPC2 HTTP/1.0", "localhost", "text/xml")
 
; sends the specified request to the HTTP server
_WinHttpSendRequest($h_openRequest, "", $Xml, $XmlSize)
 
; waits to receive the response to a HTTP request initiated by WinHttpSendRequest().
_WinHttpReceiveResponse($h_openRequest)
 
$Data = ""
Do
  ; reads data from a handle opened by the _WinHttpOpenRequest() function.
  $Data&=_WinHttpReadData($h_openRequest)
Until @error
 
; close connection and clean up
_WinHttpCloseHandle($h_openRequest)
_WinHttpCloseHandle($hw_connect)
_WinHttpCloseHandle($hw_open)
 
; show error number and resulting data
MsgBox(4096,"Error: " & @error, $Data)

Sample Emacs Lisp Client

(require 'xml-rpc)
(defvar *dokuwiki-xml-rpc-url* "https://dokuwiki.url/lib/exe/xmlrpc.php")
(xml-rpc-method-call
  *dokuwiki-xml-rpc-url*
  'dokuwiki.getTime)

PowerShell Module

A PowerShell client for Dokuwiki is available on the powershell gallery and on github.

devel/xmlrpc/clients.1549318213.txt.gz · Last modified: 2019-02-04 23:10 by andy93

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki