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
|