0

最近,我们在回归测试中遇到了大约 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% 左右。

我们将不胜感激有关错误原因和可能修复的任何帮助。

谢谢阿萨夫

4

1 回答 1

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;
}
于 2012-08-24T19:26:47.780 回答