J'utilise HP-ALM 12.01 qui semble être pleine de problèmes. Je ne peux pas mettre à jour vers une autre version pour le moment. J'essaie d'avoir accès à l'API de repos pour télécharger automatiquement les résultats de test à partir de JUnit. J'utilise l'infrastructure affichée here (exemple d'application -> Infrastructure). À partir de là, mes scripts de connexion transmettent les informations de connexion encodées en base64 à authentification-point/authenticate et je récupère un cookie LWSSO valide. Cependant, lorsque j'utilise ce cookie pour me connecter à repos/session-site pour recevoir mes cookies QCSession, je reçois une erreur 411 Length Required. J'ai essayé de coder en dur la longueur de contenu dans les en-têtes comme montré iciHP ALM Rest API QCSession 411 Authentification
public void GetQCSession(){
String qcsessionurl = con.buildUrl("rest/site-session");
Map<String, String> requestHeaders = new HashMap<String, String>();
requestHeaders.put("Content-Type", "application/xml");
requestHeaders.put("Accept", "application/xml");
requestHeaders.put("Content-Length", "0");
try {
Response resp = con.httpPost(qcsessionurl, null, requestHeaders);
con.updateCookies(resp);
System.out.println(resp.getStatusCode());
} catch (Exception e) {
e.printStackTrace();
}
}
Cela n'a pas fonctionné. J'ai aussi essayé de modifier l'infrastructure pour injecter automatiquement l'en-tête Content-Length, comme indiqué ici
private void prepareHttpRequest(
HttpURLConnection con,
Map<String, String> headers,
byte[] bytes,
String cookieString) throws IOException {
String contentType = null;
//attach cookie information if such exists
if ((cookieString != null) && !cookieString.isEmpty()) {
con.setRequestProperty("Cookie", cookieString);
}
//send data from headers
if (headers != null) {
//Skip the content-type header - should only be sent
//if you actually have any content to send. see below.
contentType = headers.remove("Content-Type");
Iterator<Entry<String, String>>
headersIterator = headers.entrySet().iterator();
while (headersIterator.hasNext()) {
Entry<String, String> header = headersIterator.next();
con.setRequestProperty(header.getKey(), header.getValue());
}
}
// If there's data to attach to the request, it's handled here.
// Note that if data exists, we take into account previously removed
// content-type.
if ((bytes != null) && (bytes.length > 0)) {
con.setDoOutput(true);
//warning: if you add content-type header then you MUST send
// information or receive error.
//so only do so if you're writing information...
if (contentType != null) {
con.setRequestProperty("Content-Type", contentType);
}
OutputStream out = con.getOutputStream();
out.write(bytes);
out.flush();
out.close();
con.setRequestProperty("Content-Length", Integer.toString(bytes.length));
} else {
con.setRequestProperty("Content-Length", "0");
}
}
qui ne fonctionne pas aussi. notez que setRequestProperty fait simplement un .set (clé, valeur) à MessageHeader
Est-ce que quelqu'un a déjà traité ce problème ou a résolu le problème?
Notez qu'aucun de ces problèmes ne se produit avec le facteur. Les 4 cookies sont générés après un post de session de site.
@Cyrusu vous n'avez pas besoin d'envoyer la longueur du contenu pour obtenir le cookie QCsession – Barney