Я использую HP ALM версии 12.55.113.Я пытаюсь загрузить результаты теста автоматически через REST-API.После проверки подлинности и попытки прочитать простой дефект я получаю ошибку 401 без проверки подлинности.Я получаю действительные файлы cookie LWSSO и QCSession, используя следующий пример кода:
public class App {
private static final String almURL = "http://something.com/qcbin";
private static final String isAuthenticatedPath = "authentication-point/authenticate";
private static final String qcSiteSession = "rest/site-session";
private static final String authTest = "rest/is-authenticated";
private static final String logoutPath = "authentication-point/logout";
private static String lswoocookie;
private static String qcsessioncookie;
public static String strDomain = "domain";
public static String strProject = "project";
public static String strUserName = "user";
public static String strPassword = "pass";
public static Client client;
public static WebTarget target;
public static Invocation.Builder invocationBuilder;
public static Response res;
private static String getEncodedAuthString() {
String auth = strUserName + ":" + strPassword;
byte[] encodedAuth = Base64.getEncoder().encode(auth.getBytes());
String authHeader = "Basic " + new String(encodedAuth);
return authHeader;
}
private static void loggedIn() {
WebTarget targeta = client.target(almURL).path(authTest);
invocationBuilder = targeta.request();
invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
Response resa = invocationBuilder.get();
System.out.println("Logged in: " + resa);
}
public static void main(String args[]) {
client = ClientBuilder.newBuilder().build();
loggedIn();
/* Get LWSSO Cookie */
target = client.target(almURL).path(isAuthenticatedPath);
invocationBuilder = target.request(new String[] { "application/xml" });
invocationBuilder.header("Authorization", getEncodedAuthString());
res = invocationBuilder.get();
System.out.println(res);
lswoocookie = res.getCookies().get("LWSSO_COOKIE_KEY").getValue();
System.out.println("LSWOO: " + lswoocookie);
/* Get QCSession Cookie */
target = client.target(almURL).path(qcSiteSession);
invocationBuilder = target.request(new String[] { "application/json" });
invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
res = invocationBuilder.post(null);
qcsessioncookie = res.getCookies().get("QCSession").getValue();
System.out.println("QCSession: " + qcsessioncookie);
System.out.println(target);
/* Get the first defect */
String midPoint = "rest/domains/" + strDomain + "/projects/" + strProject;
target = client.target(almURL).path(midPoint).path("defects/1");
invocationBuilder = target.request(new String[] { "application/json" });
invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
invocationBuilder.cookie("QCSession", qcsessioncookie);
res = invocationBuilder.get();
System.out.println(res);
loggedIn();
/* Logout */
target = client.target(almURL).path(logoutPath);
invocationBuilder = target.request();
invocationBuilder.cookie("LWSSO_COOKIE_KEY", lswoocookie);
invocationBuilder.cookie("QCSession", qcsessioncookie);
res = invocationBuilder.post(null);
System.out.println(res);
}
Я получаю следующий вывод консоли:
Зарегистрировался: InboundJaxrsResponse {context = ClientResponse {method =GET, uri = http://bla.bla:8080/qcbin/rest/is-authenticated, status = 401, причина = Ошибка аутентификации.Интеграция на основе браузера - для входа в систему добавьте '? Login-form-required = y' к URL-адресу, к которому вы пытались получить доступ.}}
InboundJaxrsResponse {context = ClientResponse {method = GET, uri = http://bla.bla/qcbin/authentication-point/authenticate, status = 200, причина = OK}}
LSWOO: IvG6JIOKRTAigQV6 ... и т. д.
QCSession: MTEzNTU ... и т. д.
JerseyWebTarget {http://bla.bla:8080/qcbin/rest/site-session}
InboundJaxrsResponse {context = ClientResponse {method = GET, uri = http://bla.bla/qcbin/rest/domains/WARTUNG/projects/Testautomatisierung/defects/1, status = 401, причина = ошибка аутентификации.Интеграция на основе браузера - для входа в систему добавьте «? Login-form-required = y» к URL-адресу, к которому вы пытались обратиться.}}
Выполнено вход: InboundJaxrsResponse {context = ClientResponse {method = GET, uri = http://bla.bla/qcbin/rest/is-authenticated, статус = 200, причина = ОК}}
InboundJaxrsResponse {context = ClientResponse {метод = POST, uri = http://sth.com/qcbin/authentication-point/logout, статус = 200, причина = ОК}}
Кто-нибудь знает, что я сделал не так?Перепробовал так много способов, но это не сработало.Заранее спасибо:)