TUTORIELS 
Description d'un client XML-RPC en Php
XML-RPC est une technologie qui permet à plusieurs applications issues de différents systèmes et langages, de communiquer entre elles.  (9 janvier 2002)
 

Pages 1 | 2

Troisième étape : l'envoi du message

La syntaxe de cette étape se base sur la méthode "send()" de la classe "xmlrpc_client" que nous évoquions tout à l'heure.

Récapitulons les deux étapes précédentes :


$client = new xmlrpc_client('/api/sample.php', 'xmlrpc-c.sourceforge.net', 80);

$message = new xmlrpcmsg('sample.sumAndDifference',
                        array(new xmlrpcval(5, 'int'), new xmlrpcval(3, 'int')));

Il est temps d'envoyer notre message au serveur :

$resultat = $client->send($message);

La syntaxe exacte de cette etape est la suivante :

$resultat=$client->send($message, $timeout, $server_method);

Lorsqu'ils sont omis, les paramètres $timeout et $server_method prennent respectivement les valeurs "0" (pas de timeout) et "HTTP".


Quatrième étape : analyse du code retour et exploitation des résultats

C'est un objet de type "xmlrpcresp" qui nous est renvoyé. Si celui-ci est égal à zéro, la connection au serveur n'a pas pu s'effectuer. Si celui n'est pas égal à zéro, il se peut quand même qu'un problème soit survenu : le serveur peut ne pas avoir compris notre demande. Il faut donc s'assurer si la méthode "faultcode()" renvoie zéro, signe qu'aucune erreur n'est survenue. En cas d'erreur la méthode "faultString()" renvoie un descriptif de l'erreur commise.

Laissons parler le code pour une version plus synthétique de ces deux étapes :

if (!$resultat)
{
     print "<p>Could not connect to HTTP server.</p>";
}
elseif ($resultat->faultCode())
{
    print "<p>XML-RPC Fault #" . $resultat->faultCode() . ": " .
    $resultat->faultString();
}


Si tout s'est bien passé il faut exploiter les données renvoyées par le serveur.
La méthode "value()" permet de "traduire" le résultat retourné par le serveur en un objet de type "xmlrpcval".
Afin de récupérer de manière exploitable par Php les valeurs "sum" et "difference" renvoyées par la méthode "sumAndDifference", il nous faut passer par plusieurs étapes : une fois que la méthode "value()" appliquée, il faut ensuite extraire de la valeur obtenue la valeur "sum" puis "difference". Cela donne :

$struct = $resultat->value(); // traduction en objet xmlrpcval
$sumval = $struct->structmem('sum'); // extraction de la valeur de sum
$sum = $sumval->scalarval(); // convertit la valeur de sum de telle façon que php puisse la manipuler (cf le lien de xmlrpcval pour plus de détails).

On procède de même pour la variable "difference".

Voici l'intégralité du code que nous avons expliqué aujourd'hui (et non pas conçu). Retrouvez-le également sur le lien suivant.
(Note : nous avons utilisé "$client" pour le tutoriel, le script nomme cette variable $server")

<html>
<head>
<title>XML-RPC PHP Demo</title>
</head>
<body>
<h1>XML-RPC PHP Demo</h1>

<?php
include 'xmlrpc.inc';

// Make an object to represent our server.
$server = new xmlrpc_client('/api/sample.php', 'xmlrpc-c.sourceforge.net', 80);


// Décommenter la ligne suivante pour bénéficier du mode debug
// $server->setDebug(1);


// Send a message to the server.
$message = new xmlrpcmsg('sample.sumAndDifference',
                        array(new xmlrpcval(5, 'int'), new xmlrpcval(3, 'int')));
$result = $server->send($message);

// Process the response.
if (!$result)
{
     print "<p>Could not connect to HTTP server.</p>";
}
elseif ($result->faultCode())
{
     print "<p>XML-RPC Fault #" . $result->faultCode() . ": " .
     $result->faultString();
}
else
{
     $struct = $result->value();
     $sumval = $struct->structmem('sum');
     $sum = $sumval->scalarval();
     $differenceval = $struct->structmem('difference');
     $difference = $differenceval->scalarval();
     print "<p>Sum: " . htmlentities($sum) .
     ", Difference: " . htmlentities($difference) . "</p>";
}
?>

</body></html>

Pour observer en ligne ce que cela peut donner, nous avons uploadé ce script ainsi que la librairie. Voici donc le fonctionnement du script par défaut, et en mode debug.


Pages 1 | 2

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page