最近,我们在回归测试中遇到了大约30%的API调用失败,这是由“未知授权标头”异常引起的。 我们从gdata java sdk获得以下异常:
Caused By AuthenticationException:
com.google.gdata.util.AuthenticationException: Unknown authorization header
<HTML>
<HEAD>
<TITLE>Unknown authorization header</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unknown authorization header</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:600)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
at com.google.gdata.client.Service.getFeed(Service.java:1135)
at com.google.gdata.client.Service.getFeed(Service.java:998)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:631)
at com.google.gdata.client.Service.getFeed(Service.java:1017)
我们正在使用gdata api运行我们的回归测试,每个测试用例使用20多个JVM。 这个错误是新的。它的出现没有改变我们的实现,也没有重大的负载变化。 但是,随着我们更改并发JVM的数量,错误率会相应更改,因为我们将JVM的数量减少到几个,因此错误率降低到大约10%。
我们非常感谢有关错误原因和可能修复的任何帮助。
由于 阿萨弗
答案 0 :(得分:0)
private DocsService getDocsService(boolean withHeader) {
DocsService docsService = new DocsService(APP_NAME);
try {
docsService.setOAuthCredentials(getAuthParameters(),
new OAuthHmacSha1Signer());
if (withHeader) {
docsService.getRequestFactory().setHeader("If-Match", "*");
}
return docsService;
} catch (OAuthException oAuthException) {
throw new TestFlowException(
"Failed to set Google Drive Oauth Credentials",
oAuthException);
}
}
private GoogleOAuthParameters getAuthParameters() {
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(GOOGLE_DRIVE_KEY.getKey());
oauthParameters.setOAuthConsumerSecret(GOOGLE_DRIVE_KEY.getSecret());
oauthParameters.setOAuthToken(ACCESS_CREDENTIALS.getKey());
oauthParameters.setOAuthTokenSecret(ACCESS_CREDENTIALS.getPassword());
return oauthParameters;
}