我试图在我的appengine项目中使用twitter4j获得用户的访问令牌。我的代码在
下面 HttpSession session = req.getSession();
String tokenCopy = (String) session
.getAttribute(Constants.TOKEN_SESSION_KEY);
String tokenSecretCopy = (String) session
.getAttribute(Constants.TOKENSECRET_SESSION_KEY);
String oauth_token = req.getParameter("oauth_token");
//The above is the same as the tokenCopy, verified by printing.
String oauth_verifier = req.getParameter("oauth_verifier");
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Constants.CONSUMER_KEY,
Constants.CONSUMER_SECRET);
String extraHTML = "NOTHINGn";
try {
AccessToken accessToken;
accessToken = twitter
.getOAuthAccessToken(tokenCopy, oauth_verifier);
// accessToken = twitter.getOAuthAccessToken(oauth_verifier);
// accessToken = twitter.getOAuthAccessToken();
String accessTokenStr = accessToken.getToken();
String accessTokenSecret = accessToken.getTokenSecret();
extraHTML = "<p>accessToken = " + accessTokenStr
+ ", accessTokenSecret = " + accessTokenSecret + "</p>n";
// TODO latertwitter.setOAuthAccessToken(accessToken);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
extraHTML = "<pre>" + e.getMessage() + "</pre>n";
}
遗憾的是,当我的代码运行时,我总是得到异常
401:Authentication credentials (https://dev.twitter.com/docs/auth) were missing or
incorrect. Ensure that you have set valid conumer key/secret, access token/secret,
and the system clock in in sync.
我知道我的CONSUMER_KEY
和CONSUMER_SECRET
是正确的(我用它们来创建twitter认证url,这工作得很好)。我遗漏了什么?我应该传递一些其他的东西给getOAuthAccessToken()
的调用吗?
谢谢。
我使用RequestToken
对象,而不是String
,其他一切看起来都一样。
我的意思是当我准备认证url时,我正在做以下事情:
RequestToken requestToken = twitter.getOAuthRequestToken(callbackUrl);
session.setAttribute(Constants.TOKEN_SESSION_KEY, requestToken);
,而不是代码的第2行,它将是:
RequestToken tokenCopy = (RequestToken) session.getAttribute(Constants.TOKEN_SESSION_KEY);