使用此代碼將來自Drive UI的請求的初始代碼與可用於製作API請求的令牌交換。谷歌驅動器API交換授權碼有時會拋出500個
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>
可能是什麼問題呢?
HTTP 500錯誤應該表示服務器端問題 - 不是授權或請求格式問題。 FWIW,我看到HTTP有時500個響應經由com.google.api.services.drive.Drive $文件$ List.execute 「www.googleapis.com/drive/v2/files」: \t'500內部服務器錯誤 \t { \t 「代碼」:500, \t 「錯誤」:[{ \t 「結構域」: 「全局」, \t 「消息」: 「內部錯誤」, \t 「原因」: 「InternalError該」 \t }], \t 「消息」: 「內部錯誤」 \t}' – 2012-08-09 15:56:11
感謝確認我的恐懼,@BradTofel。問題在那裏,但我不能說服用戶,這不是我的代碼的錯......我應該引入重審機制?據我記得這樣的代碼只能交換一次,所以不知道這是否可行。 – x2305andy2305x 2012-08-10 06:36:38
該代碼只能*成功*交換一次。既然你有'500',你應該安全的重試;如果確實代碼不能被重新交換,你會得到另一個狀態代碼,如'400'。在最壞的情況下,您必須重新將用戶重定向到授權頁面。 – Alain 2012-08-10 16:35:58