首先让我解释一下我的场景。我使用 Scribe 通过 Oauth 连接到 Scribe 不直接支持的 API。也就是说,我要连接的服务器需要输入 4 位数字作为创建 accessToken 的最后一步。
虽然这工作得很好,但当用户输入错误的 4 位数字时,应用程序将永远运行,不会抛出任何错误或异常(据我所知)。这是我正在使用的代码:
//verifierString has the 4-digit number
verifier = new Verifier(verifierString);
Logger.debug("Trading the Request Token for an Access Token...");
accessToken = service.getAccessToken(requestToken, verifier);
应用程序永远保留在 getAccessToken 中。我想知道是否有办法控制这个,因为用户很可能输入错误的 4 位数字。我检查了 getAccessToken、Oauth 1.0 的代码,因为它是我正在使用的代码:
public Token getAccessToken(Token requestToken, Verifier verifier)
{
config.log("obtaining access token from " + api.getAccessTokenEndpoint());
OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(), api.getAccessTokenEndpoint());
request.addOAuthParameter(OAuthConstants.TOKEN, requestToken.getToken());
request.addOAuthParameter(OAuthConstants.VERIFIER, verifier.getValue());
config.log("setting token to: " + requestToken + " and verifier to: " + verifier);
addOAuthParams(request, requestToken);
appendSignature(request);
Response response = request.send();
return api.getAccessTokenExtractor().extract(response.getBody());
}
似乎只是 send() 抛出了 RuntimeException,但不确定从我的代码中捕获它是否是正确的方法......有什么建议吗?
谢谢! 亚历克斯
最佳答案
如果您尝试任何 scribe
示例,您会发现输入错误的验证程序代码会立即导致 OAuthException
(请注意,它是一个 OAuthException
,但正如您正确地声明它继承自 RuntimeException
,这是设计使然,因为我 100% 反对检查异常)。
问题出在服务器端,正如你所说,它使http连接长时间保持打开状态,甚至可能永远保持打开状态,直到发生默认连接超时。
也许如果您在 Api 论坛中提问,您会得到更好的答复,同时使用 scribe 的调试模式(自 1.3.0 起新增)可以帮助您诊断大多数问题。
关于java - 当验证者出错时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365714/