2017-06-13 4 views
1

Y a-t-il quelqu'un qui a travaillé sur les API HP ALM avec PHP?Envoi de l'ID de cookie et de session à l'API HP ALM

Je reçois les cookies de qcbin/api/authentification/signature API

Mais quand je suis en train d'envoyer ces cookies aux autres API suivantes, son retour me httpcode 401 qui est pas authentifié.

J'utilise également l'API qcbin/authentication-point/authenticate et l'API qcbin/api/site-session pour obtenir et gérer les sessions.

Mon code est le suivant:

$ url = "https://myhost/qcbin/api/authentication/sign-in"; $ credentials = $ utilisateur. ':'. mot de passe $; $ headers = array ("GET /HTTP/1.1","Authorization: Basic". Base64_encode ($ credentials));

curl_setopt($qc, CURLOPT_URL, $url); 
curl_setopt($qc, CURLOPT_HTTPGET,1); 
curl_setopt($qc, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($qc, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($qc, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($qc); 
$response = curl_getinfo($qc); 

Je suis en train d'obtenir les dossiers de jeu de test:

$ FOLDER_NAME = "nom_dossier"; $ nom_sécuritaire = rawurlencode ($ nom_dossier); $ url = "https://myhost/qcbin/rest/domains/NETWORKS_QUALITY/projects/NETWORKS/test-set-folders?query= {name ['". $ nom_sécuritaire. "']}";

$qc = curl_init(); 
curl_setopt($qc, CURLOPT_URL, $url); 

//curl_setopt($qc, CURLOPT_HTTPHEADER, $headers); 

curl_setopt($qc, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($qc, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($qc, CURLOPT_COOKIE,$ckfile); 
curl_setopt($qc, CURLOPT_COOKIEFILE, $ckfile); 


curl_setopt($qc, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($qc, CURLOPT_VERBOSE, true);  

$result = curl_exec($qc); 
$response = curl_getinfo($qc); 

this response returns me httpcode 401 instead of 200. Please help me if anybody worked on this before. 

Merci Biswajit Jena

Répondre

0

essayer de comprendre votre requête .... êtes-vous de retour de l'authentification du succès 200? J'utilise REST-API par un module python appelé "requests". Si vous jetez un oeil à la bibliothèque de l'API REST, vous devriez renvoyer le cookie dans l'en-tête :-) Dans l'automatisation, vous devriez toujours regarder l'en-tête (cookie) et l'utiliser pour y répondre.

Le/HTTP/1.1 dans certaines versions de QC ALM n'est même pas nécessaire. En outre, dans l'en-tête, vous devez spécifier des paramètres supplémentaires comme si vous envoyez un format de fichier xml ou json et ainsi de suite.

Content-Type":"application/xml", 
"KeepAlive":"true", 
"Authorization":"Basic ", 
"QCSession" : None, 
"Cookie": None 

S'il vous plaît jeter un oeil à la bibliothèque ALM QC, mais j'espère que j'ai votre point :-) Malheureusement avec PHP, je ne peux pas aider trop, mais je ne peux pas voir un en-tête approprié envoyé au serveur.

+0

Merci Marco. Oui, je reçois 200 de l'API d'authentification. Selon votre commentaire, je dois envoyer le cookie en en-tête. J'ai essayé d'envoyer le cookie dans l'en-tête aussi, mais n'a pas fonctionné. – Biswajit

+0

En python par exemple, mes requêtes ressemblent à: mySession.get (url, data = xml_data, header = my_header). Très probablement je suppose que dans votre cas, vous devriez vérifier comment envoyer l'en-tête par l'utilisation de l'action curl. –

+0

Pendant le processus d'authentification puisque c'est le premier message que vous n'utilisez aucun en-tête important;) alors le LSSO-Cookie doit être utilisé. –

0

Oui, j'ai la solution. Seules les options CURL requises doivent être transmises à tout appel CURL.

Donc, j'ai mis les options suivantes seulement et il m'a renvoyé http_code comme 200 et des données aussi. Pas besoin d'écrire des options CURL inutiles.

curl_setopt($qc, CURLOPT_URL, $url); 
curl_setopt($qc, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($qc, CURLOPT_RETURNTRANSFER, true); 

Merci

+0

Très bien en effet :-) Vous devez ensuite toujours utiliser l'option cookie pour entrer dans la prochaine requête et ainsi de suite! Passez une bonne journée et s'il vous plaît, fermez la question;) –