Section courante

A propos

Section administrative du site

XML-RPC

Le XML-RPC est un service Web qu'offre le projet WordPress afin de communiquer directement aux contenus depuis une application externe. Normalement, il utilise le port standard 80 et est situé à la racine du site sous l'appel «xmlrpc.php». Ainsi, par exemple le nom du domaine «localhost», on pourrait y accéder à partir du lien «http://localhost/xmlrpc.php».

Programmation

On peut communiquer facilement en effectuant un appel CURL et en utilisant la méthode «POST» pour envoyer un XML de paramètres. Voici un exemple de son utilisation en PHP :

  1. <?php
  2. function callXMLRPC($URL,$MethodName,$param = array()) {
  3.     $curl = curl_init();
  4.     curl_setopt($curl, CURLOPT_POST, 1 );
  5.     curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  6.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  7.     curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  8.     curl_setopt($curl, CURLOPT_URL, $URL);
  9.     curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
  10.     curl_setopt($curl, CURLOPT_TIMEOUT, 20);
  11.     curl_setopt($curl, CURLOPT_POSTFIELDS, '<?xml version="1.0" encoding="iso-8859-1"?>' .
  12.                             '<methodCall>' .
  13.                             '<methodName>'.$MethodName.'</methodName>' .
  14.                             '<params>' .
  15.                                 (count($param)>1?'<param><value>'.implode('</value></param><param><value>',$param).'</value></param>':(count($param)==1?'<param><value>'.$param[0].'</value></param>':'')).
  16.                             '</params>' .
  17.                             '</methodCall>' );
  18.     $contents = curl_exec($curl);
  19.     $Result = curl_getinfo($curl,CURLINFO_HTTP_CODE);
  20.     curl_close($curl);
  21.     if(($contents) && ($Result == 200)) return $contents;
  22.     else return false;
  23. }
  24.  
  25. // Demande la liste des auteurs :
  26. echo callXMLRPC("http://localhost/xmlrpc.php", 'wp.getAuthors', array(1,'utilisateur','motdepasse'));
  27. // Demande l'article avec l'identificateur de postage d'article 2 :
  28. echo callXMLRPC("http://localhost/xmlrpc.php",'blogger.getPost',array(1,2,'utilisateur','motdepasse'));
  29. ?>

on obtiendra un résultat comme ceci :

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
    <value><struct>
  <member><name>user_id</name><value><string>9</string></value></member>
  <member><name>user_login</name><value><string>smaltais</string></value></member>
  <member><name>display_name</name><value><string>Sylvain Maltais</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <struct>
  <member><name>userid</name><value><string>1</string></value></member>
  <member><name>dateCreated</name><value><dateTime.iso8601>20150525T12:02:38</dateTime.iso8601></value></member>
  <member><name>content</name><value><string>Ceci un exemple de contenu d'article</string></value></member>
  <member><name>postid</name><value><string>2</string></value></member>
</struct>
      </value>
    </param>
  </params>
</methodResponse>

Il existe également des solutions pour les autres langages de programmation comme par exemple en Ruby le projet WordPress XML-RPC client for Ruby, en C# (C Sharp) le projet WordPressSharp,...

Liste des méthodes

La liste des méthodes et la liste de méthodes disponibles pour appeler le service Web. Elle est transmet dans le même XML qu'avec les paramètres sous l'appellation «methodName». Voici la liste des méthodes fournit de base :

Nom Version Description
wp.deleteCategory 2.5 à 3.4 Cette méthode de service Web permet de supprimer une catégorie existante.
wp.deleteComment 2.7+ Cette méthode de service Web permet de supprimer commentaire existant.
wp.deletePage 2.2+ Cette méthode de service Web permet de supprimer une page existante.
wp.deletePost 3.4+ Cette méthode de service Web permet de supprimer un postage d'article existant de n'importe quel type de postage enregistré.
wp.deleteTerm 3.4+ Cette méthode de service Web permet de supprimer un terme de taxonomie existant.
wp.editComment 2.7+ Cette méthode de service Web permet de modifier un commentaire existant.
wp.editPage 2.2+ Cette méthode de service Web permet de modifier une page existant.
wp.editPost 3.4+ Cette méthode de service Web permet de modifier un postage d'article existant par n'importe quel type de postage enregistré.
wp.editProfile 3.5+ Cette méthode de service Web permet de modifier le profile de l'utilisateur.
wp.editTerm 3.4+ Cette méthode de service Web permet de modifier un terme de taxonomie existant.
wp.getAuthors 3.4+ Cette méthode de service Web permet de demander la liste de tous les utilisateurs.
wp.getCategories 2.2 à 3.4 Cette méthode de service Web permet de demander la liste de tous les catégories.
wp.getCommentCount 2.7+ Cette méthode de service Web permet de demander le nombre de commentaires pour un postage d'article spécifié.
wp.getComment 2.7+ Cette méthode de service Web permet de demander un commentaire.
wp.getComments 2.7+ Cette méthode de service Web permet de demander la liste des commentaires.
wp.getCommentStatusList 2.7+ Cette méthode de service Web permet de demander la liste des états de commentaire.
wp.getMediaItem 3.1+ Cette méthode de service Web permet de demander un item média en attachement.
wp.getMediaLibrary 3.1+ Cette méthode de service Web permet de demander la liste des items média en attachement.
wp.getOptions 2.6+ Cette méthode de service Web permet de demander les options d'un blog.
wp.getPage 2.2+ Cette méthode de service Web permet de demander une page.
wp.getPageList 2.2+ Cette méthode de service Web permet de demander la liste des pages avec un minimum de détails.
wp.getPages 2.2+ Cette méthode de service Web permet de demander la liste des pages avec tous les détails.
wp.getPageStatusList 2.2+ Cette méthode de service Web permet de demander la liste des valeurs d'états supportés par les pages.
wp.getPageTemplates 2.6+ Cette méthode de service Web permet de demander les gabarits de page pour le thème actif.
wp.getPost 3.4+ Cette méthode de service Web permet de demander une postage d'article de n'importe quel type.
wp.getPostFormats 3.4+ Cette méthode de service Web permet de demander la liste de formats de postage d'article.
wp.getPosts 3.4+ Cette méthode de service Web permet de demander une liste de postage de n'importe quel type de postage d'article enregistré.
wp.getPostStatusList 3.4+ Cette méthode de service Web permet de demander la liste des valeurs d'états de postage d'article supportés.
wp.getPostType 3.4+ Cette méthode de service Web permet de demander le type de postage d'article enregistré.
wp.getPostTypes 3.4+ Cette méthode de service Web permet de demander la liste des types de postage enregistré.
wp.getProfile 3.5+ Cette méthode de service Web permet de demander le profile de l'utilisateur.
wp.getTags 2.7 à 3.4 Cette méthode de service Web permet de demander la liste de toutes les balises.
wp.getTaxonomy 3.4+ Cette méthode de service Web permet de demander les informations à propos de la taxonomie.
wp.getTaxonomies 3.4+ Cette méthode de service Web permet de demander la liste des taxonomies.
wp.getTerm 3.4+ Cette méthode de service Web permet de demander un terme de taxonomie.
wp.getTerms 3.4+ Cette méthode de service Web permet de demander la liste des termes de taxonomie.
wp.getUser 3.5+ Cette méthode de service Web permet de demander un utilisateur.
wp.getUsers 3.5+ Cette méthode de service Web permet de demander la liste des utilisateurs.
wp.getUsersBlogs 3.5+ Cette méthode de service Web permet de demander la liste des blogs d'un utilisateur.
wp.newCategory 2.2 à 3.4 Cette méthode de service Web permet de créer une nouvelle catégorie.
wp.newComment 2.7+ Cette méthode de service Web permet de créer un nouveau commentaire.
wp.newPage 2.2+ Cette méthode de service Web permet de créer une nouvelle page.
wp.newPost 3.4+ Cette méthode de service Web permet de créer un postage d'article de n'importe quel type enregistré.
wp.newTerm 3.4+ Cette méthode de service Web permet de créer un terme de taxonomie.
wp.setOptions 2.6+ Cette méthode de service Web permet de fixer les options d'un blog.
wp.suggestCategories 2.2 à 3.4 Cette méthode de service Web permet de demander la liste des catégories débutant à la chaine de caractères spécifié.
wp.uploadFile 3.1+ Cette méthode de service Web permet de téléverser un fichier média.

Légende

    Cette couleur permet d'indiquer la méthode de service Web est obsolète.

Désactivation ou protection contre une méthode XML-RPC

Étant donné que le service Web XML-RPC, fournit avec WordPress, donne accès à l'ajouter, la modifier et la suppression d'article et de catégorie, il peut s'agir d'une porte grande ouverte pour les attaques et les tentatives de créer le projet de l'externe. Ainsi, si vous ne l'utilisez pas, il est donc grandement recommandé de désactiver ce service Web. Pour pouvoir désactiver ou interdire l'utilisation du XML-RPC par WordPress, vous devez ajouter les lignes suivantes à la fin du fichier «.htaccess» pour Apache 2.2 :

<Files xmlrpc.php>
order deny,allow
deny from all
allow from none
</Files>

pour les serveurs Apache 2.4 ou supérieur :

<Files xmlrpc.php>
Require all denied
</Files>

pour tous les Apache

Redirect 403 /xmlrpc.php

L'exemple suivant permet d'interdire les appels externes au site Web sur l'API XML-RPC de WordPress :

RewriteCond %{HTTP_HOST} !localhost
RewriteRule /xmlrpc.php - [R=403,NC,L]

pour les serveurs web NGinx

location = /xmlrpc.php {
deny all;
}

Remarque

Voir également

Références des protocoles réseaux - XML-RPC - Introduction

Dernière mise à jour : jeudi, le 9 mars 2017