Accès GLPI à partir d'une application externe (PHP) : Différence entre versions
De wikiGite
Ligne 16 : | Ligne 16 : | ||
Par le "+" de la barre d'outils, déclarer une nouvelle connexion autorisant l'adresse IP du serveur client (dans "Plage d'adresses IPv4", mettre la même adresse 2 fois s'il est le seul àse connecter à l'avenir). | Par le "+" de la barre d'outils, déclarer une nouvelle connexion autorisant l'adresse IP du serveur client (dans "Plage d'adresses IPv4", mettre la même adresse 2 fois s'il est le seul àse connecter à l'avenir). | ||
+ | Si on oublie cette autorisation, le test ci-dessous indiquera "Accès refusé". | ||
=== Test et validation de l'installation de xmlrpc === | === Test et validation de l'installation de xmlrpc === | ||
copier /var/www/glpi/plugins/webservices/scripts/testxmlrpc.php du serveur GLPI vers le serveur client. | copier /var/www/glpi/plugins/webservices/scripts/testxmlrpc.php du serveur GLPI vers le serveur client. | ||
Ligne 21 : | Ligne 22 : | ||
Exemples d'utilisation de testxmlrpc.php : | Exemples d'utilisation de testxmlrpc.php : | ||
php testxmlrpc.php --help | php testxmlrpc.php --help | ||
− | php testxmlrpc.php --method=glpi.doLogin -- | + | php testxmlrpc.php --method=glpi.doLogin --login_name=User --login_password=pass |
On obtient en retour un tableau de valeur, la plus importante étant "session" réutilisée pour les appels suivants : | On obtient en retour un tableau de valeur, la plus importante étant "session" réutilisée pour les appels suivants : | ||
+ Calling 'glpi.doLogin' on http://localhost//glpi/plugins/webservices/xmlrpc.php | + Calling 'glpi.doLogin' on http://localhost//glpi/plugins/webservices/xmlrpc.php |
Version du 22 août 2012 à 14:16
A ce jour (GLPI 0.83), la méthode la plus simple est de passer par le WebService (module GLPI : http://plugins.glpi-project.org/spip.php?article93), par XMLRPC (SOAP trop spécifique, REST pas assez stable).
Sommaire
Installation
Sur le serveur GLPI
Si ça n'a pas déjà été fait pour le module Shinken par exemple, installer le module WebServices
Le_plugin_Monitoring#Plugin_WebServices
Sur le serveur de l'application cliente (testé sur CentOS)
yum install --enablerepo=remi php-xmlrpc /etc/init.d/httpd reload
Utilisation
Autorisation d'accès à GLPI
Pour autoriser le serveur client à se connecter sur le serveur GLPI, aller dans Plugins / WebService dans l'interface GLPI.
Par le "+" de la barre d'outils, déclarer une nouvelle connexion autorisant l'adresse IP du serveur client (dans "Plage d'adresses IPv4", mettre la même adresse 2 fois s'il est le seul àse connecter à l'avenir).
Si on oublie cette autorisation, le test ci-dessous indiquera "Accès refusé".
Test et validation de l'installation de xmlrpc
copier /var/www/glpi/plugins/webservices/scripts/testxmlrpc.php du serveur GLPI vers le serveur client.
Exemples d'utilisation de testxmlrpc.php :
php testxmlrpc.php --help php testxmlrpc.php --method=glpi.doLogin --login_name=User --login_password=pass
On obtient en retour un tableau de valeur, la plus importante étant "session" réutilisée pour les appels suivants :
+ Calling 'glpi.doLogin' on http://localhost//glpi/plugins/webservices/xmlrpc.php + Response: Array ( [id] => 9 [name] => User [realname] => [firstname] => [session] => bu9efhcupbvlsvuk2bto52q9p4 )
php testxmlrpc.php --session=bu9efhcupbvlsvuk2bto52q9p4 --method=glpi.listDropdownValues --dropdown=TicketType
On récupère ici un tableau avec tous les types de tickets déclarés dans GLPI.
Code PHP
Dans une page PHP, on appelle directement les fonctions GLPI.
Equivalent du login réalisé ci-dessus avec testxmlrpc.php :
function login() { global $glpi_user, $glpi_pass, $ws_user, $ws_pass; $args['method'] = "glpi.doLogin"; $args['login_name'] = $glpi_user; $args['login_password'] = $glpi_pass; if (isset($ws_user)) { $args['username'] = $ws_user; } if (isset($ws_pass)) { $args['password'] = $ws_pass; } if ($result = call_glpi($args)) { return $result['session']; } }
La fonction call_glpi() a cette forme : function call_glpi($args) {
global $host,$url,$deflate,$base64; // To avoid IDE warning $http_response_header = ; echo "+ Calling {$args['method']} on http://$host/$url\n"; if (isset($args['session'])) { $url_session = $url.'?session='.$args['session']; } else { $url_session = $url; } $header = "Content-Type: text/xml";
if (isset($deflate)) { $header .= "\nAccept-Encoding: deflate"; } if (isset($base64)) { $args['base64'] = $base64; } $request = xmlrpc_encode_request($args['method'], $args); $context = stream_context_create(array('http' => array('method' => "POST", 'header' => $header, 'content' => $request))); $file = file_get_contents("http://$host/$url_session", false, $context); if (!$file) { die("+ No response\n"); } if (in_array('Content-Encoding: deflate', $http_response_header)) { $lenc = strlen($file); echo "+ Compressed response : $lenc\n"; $file = gzuncompress($file); $lend = strlen($file); echo "+ Uncompressed response : $lend (".round(100.0*$lenc/$lend)."%)\n"; } $response = xmlrpc_decode($file); if (!is_array($response)) { echo $file; die ("+ Bad response\n"); } if (xmlrpc_is_fault($response)) { echo("xmlrpc error(".$response['faultCode']."): ".$response['faultString']."\n"); } else { return $response; } }
Documentation
Wiki développeurs WebServices :