2011-07-21 7 views
0

J'essaie d'appeler une API vChargeBack pour obtenir des informations sur le serveur vCenter. J'ai des problèmes avec ça.PHP: appel à une API REST

Je dois passer la requête en tant que données XML dans le corps de la requête. Et aussi je dois passer la version comme paramètre d'URL. Le code que j'ai écrit est

$xmlfile=simplexml_load_file('login.xml'); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$xmlfile);//Passing XML file as POST field 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL,"https://xx.xx.xx.xx/vCenter-CB/api/login");//Setting URL 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , false);//Since I am requesting https 
curl_setopt($ch , CURLOPT_SSL_VERIFYHOST , false);//Since I am requesting https 
curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Accept: ' . $this->acceptType)); 
$response=curl_exec($ch);//Getting response 
$responseInfo=curl_getinfo($ch);//Getting response headers 

Lorsque j'exécute, j'ai une réponse de 400 demandes incorrectes. Ce que j'ai remarqué, c'est que je n'envoie pas de version en tant que paramètre d'URL. Il devrait être Nom: version valeur: 1.5.0 Je ne sais pas comment envoyer cette version en tant que paramètre d'URL. Devrais-je envoyer cela comme POSTFIELD alors comment dois-je envoyer le fichier XML en tant que corps de la demande.

S'il vous plaît aidez-moi ...

Cordialement, Srinath

+0

Ne vous donnent-ils pas un exemple? "Paramètre URL" ressemble à ce que vous devriez faire 'https: //xx.xx.xx.xx/vCenter-CB/api/login? Version = 1.5.0' –

+0

Ils n'ont pas donné d'exemple en PHP mais j'ai un exemple en Java, ils ont créé un objet pour la classe PostMethod et ont défini la version en utilisant 'NameValuePair [] parameters = {new NameValuePair (" version "," 1.5.0 ")}; post = nouveau PostMethod (uri); post.setQueryString (paramètres); 'J'ai essayé' https: //xx.xx.xx.xx/vCenter-CB/api/login? version = 1.5.0' aussi, il est toujours dit Bad Request. – Srinath

+0

C'est utile. La chaîne de requête est la partie qui vient après le? dans une URL, pas le corps du POST. Vous êtes donc sur la bonne voie, mais je ne sais pas ce que vous faites d'autre, car je n'ai aucune idée de ce qu'est cette API et je ne lirai pas sa documentation. –

Répondre

1

L'interface est rétrofacturation pas RESTful. C'est un portail XML avec des ressources à des points finaux définis par la documentation. Pour vous connecter, remplissez API_NAMESPACE comme espace de noms XML fourni pour votre installation, API_VERSION comme numéro de version de l'API, TYPE (qui peut être "local" ou "ldap"). NAME et PASSWORD devrait être évident.

<Request xmlns="$API_NAMESPACE/$API_VERSION"> 
    <Users> 
     <User> 
      <Type>$TYPE</Type> 
      <Name>$NAME</Name> 
      <Password>$PASSWORD</Password> 
     </User> 
    </Users> 
</Request> 

Générer une requête POST à ​​https://hostname/vCenter-CB/api/login?version=$API_VERSION avec les données POST-premières réglées sur le XML ci-dessus. N'oubliez pas de conserver le cookie de session que vous avez envoyé après le retour de cette requête, car il représente votre session sur le serveur.

De plus, si vous utilisez les connexions LDAP, vous devez inclure un élément enfant LdapUsers en dessous du Users (en tant que frères et soeurs de l'élément User) pour fournir des informations d'identification LDAP. Ceci est documenté dans le Guide de programmation d'API de VMware.