2

使用此代码将来自 Drive UI 的请求的初始代码与我可以用来发出 API 请求的令牌交换。

public GoogleCredential exchangeCode(String authorizationCode) throws CodeExchangeException {
        try {
            GoogleTokenResponse response = new GoogleAuthorizationCodeTokenRequest(new NetHttpTransport(), new JacksonFactory(), CLIENT_ID, CLIENT_SECRET, authorizationCode, REDIRECT_URI).execute();
            return new GoogleCredential.Builder().setClientSecrets(CLIENT_ID, CLIENT_SECRET).setTransport(new NetHttpTransport()).setJsonFactory(new JacksonFactory()).build().setFromTokenResponse(response);
        }
        catch (Exception e) {
            log.error("An error occurred: " + e);
            throw new CodeExchangeException(null);
        }
    }

在大多数情况下它有效,但在某些情况下(可能是 5%),我得到

An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 500 Error processing OAuth 2 request
<HTML>
<HEAD>
<TITLE>Error processing OAuth 2 request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Error processing OAuth 2 request</H1>
<H2>Error 500</H2>
</BODY>
</HTML>

可能是什么问题呢?

4

2 回答 2

0

我得到大约 500 个内部服务器错误。我的 API 调用的 0.5%。我有一个重试机制,似乎总是在第二次尝试时成功。

    function doSomething(req) {
.
.
.
.
         restRequest.execute(function(resp) {
    var myResp = new Object();

    try {
        if (resp.error) {
            if (resp.error.code == "401") {
                do401(function() {
                    doSomething(req);
                }, req, myResp);
                return;
            }
            if (resp.error.code == "403") {
                cl("403 no auth " + resp.error.message);
                return;
            }
            if (resp.error.code == "500") {
                cl("server error 500, retrying " + resp.error.message);
                exponentialBackoff();
                                    doSomething(req);
                return;
            }
        }
    } catch (ex) {
        cl("[fg62] exception " + ex);
    }
于 2012-08-18T06:13:58.460 回答
0

这是由于在授权过程(OAuth 2.0 服务器端流程的身份验证代码交换)期间我们的 2 台内部服务器之间的超时造成的。我们在使用 OAuth 2.0 Playground 时遇到了同样的问题。Google 的身份验证团队现在应该已经解决了这个问题。如果您再次遇到此问题,请告诉我们。

重试机制通常可以很好地解决您从 Drive API 获得的暂时性 503 错误。但在那种情况下(来自 Auth 服务器的 500 个错误)它没有帮助,因为对于相同服务器配置中的相同用户(即位于遥远地理区域的用户和服务器),相同的调用每次都会超时。

于 2012-09-28T12:40:06.363 回答