2
我使用Signpost作爲OAuth實現發佈到Twitter。並且實現了GoogleAppEngineOAuthConsumer
和GoogleAppEngineOAuthProvider
類,但由於它們非常微不足道,所以我沒有在這裏提供源代碼。Twitter API狀態更新始終返回「錯誤簽名」
這是我的驗證部分,這似乎工作得很好。
LoginServlet.java:
// fetching the request token
OAuthConsumer consumer = new GoogleAppEngineOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
OAuthProvider provider = new GoogleAppEngineOAuthProvider(REQUEST_TOKEN_URL, ACCESS_TOKEN_URL, AUTHORIZATION_URL);
String redirectUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
// cache the request token and request token secret
response.sendRedirect(redirectUrl);
CallbackServlet.java
// fetching the access token
String verifier = (String) req.getParameter("oauth_verifier");
// retrieve request token and request token secret from cache
OAuthConsumer consumer = new GoogleAppEngineOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
OAuthProvider provider = new GoogleAppEngineOAuthProvider(REQUEST_TOKEN_URL,
consumer.setTokenWithSecret(token, tokenSecret);
provider.setOAuth10a(true);
provider.retrieveAccessToken(consumer, verifier);
// store access token and access token secret
而這裏的實際問題的一部分。
TweetServlet.java
OAuthConsumer consumer = new GoogleAppEngineOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
// retrieve access token and access token secret from storage
consumer.setTokenWithSecret(accessToken, accessTokenSecret);
final HTTPRequest updateStatus = new HTTPRequest(new URL("http://api.twitter.com/1/statuses/update.json"), HTTPMethod.POST);
updateStatus.setPayload(("status=" + URLEncoder.encode(message, "UTF-8")).getBytes());
consumer.sign(updateStatus);
logger.debug(new String(URLFetchServiceFactory.getURLFetchService().fetch(updateStatus).getContent()));
每一次它的結果:{"request":"/1/statuses/update.json","error":"Incorrect signature"}
。
我已經想通了,這可能涉及到我送參數時,由於路上,當我改變'TweetServlet'到'最後的HTTPRequest updateStatus =新的HTTPRequest(新URL(「HTTP:// API。 twitter.com/1/statuses/home_timeline.json「),HTTPMethod.GET);'它返回正確的響應。 – hleinone 2010-10-06 05:39:23
爲什麼不使用Twitter4J? – Bozho 2010-10-06 06:08:00
如果我沒有這個工作,這將是我的下一步。我之所以選擇不這樣做,是因爲我只使用它的一小部分,其次我可能會將其用作基於OAuth的其他服務的基礎。 – hleinone 2010-10-07 18:23:44