使用Java对HP ALM 12 REST API进行身份验证
问题描述:
我正在使用Java获取测试用例信息。我使用AuthenticateLoginLogoutExample
代码作为参考。我能够验证用户身份,但是当我使用GET方法通过REST API检索诸如测试用例信息等简单信息时,我收到了状态码HTTP 401。使用Java对HP ALM 12 REST API进行身份验证
答
获取HTTP 401状态码正常。事实上,您可以ping通服务器。此外尝试使用“http get”方法使用“{Host}/qcbin/rest/is-authenticated”来捕获响应。您会在Documentation中的其他连接器类中找到http获取方法。
答
如果您使用AuthenticateLoginLogoutExample作为参考,它应该是确定的。
响应可能的原因您收到:
- 用户未分配到你感兴趣的项目;
- 您已执行注销操作;
- 不理想的cookie管理。 ALM要求会话保持REST互操作。它在请求中使用LWSSO_COOKIE_KEY苦力来实现。它以服务器的响应作为成功会话开幕的结果发送。如果你松了,你将面临这样的答复代码。
答
惠普拥有自己的base64encoder.java类,您需要使用它。你不能使用java中的标准。你必须使用他们的版本。我得到相同的401错误,直到我找到他们的编码器类。
public class Base64Encoder {
private final static char[] ALPHABET =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/".toCharArray();
private static int[] toInt = new int[128];
static {
for (int i = 0; i < ALPHABET.length; i++) {
toInt[ALPHABET[i]] = i;
}
}
/**
* Translates the specified byte array into Base64 string.
*
* @param buf the byte array (not null)
* @return the translated Base64 string (not null)
*/
public static String encode(byte[] buf) {
int size = buf.length;
char[] ar = new char[((size + 2)/3) * 4];
int a = 0;
int i = 0;
while (i < size) {
byte b0 = buf[i++];
byte b1 = (i < size) ? buf[i++] : 0;
byte b2 = (i < size) ? buf[i++] : 0;
int mask = 0x3F;
ar[a++] = ALPHABET[(b0 >> 2) & mask];
ar[a++] = ALPHABET[((b0 << 4) | ((b1 & 0xFF) >> 4)) & mask];
ar[a++] = ALPHABET[((b1 << 2) | ((b2 & 0xFF) >> 6)) & mask];
ar[a++] = ALPHABET[b2 & mask];
}
switch (size % 3) {
case 1:
ar[--a] = '=';
case 2:
ar[--a] = '=';
}
return new String(ar);
}
}
Plese显示您的代码 –