我对Scribe很新,但是当我尝试通过Twitter进行身份验证时,一个奇怪的错误就会上升.我的代码与TwitterExample完全相同:
OAuthService service = new ServiceBuilder() .provider(TwitterApi.class) .apiKey("XXXXXXXXXXXXXX<>XXXXXXXXXXXXXXX") .apiSecret("YYYYYYYYYYYYYYYY< >YYYYYYYYYYYYYYYYYYYYYYYYY") .debug() .build(); Token requestToken = service.getRequestToken(); Log.i("OAUTH LINK", service.getAuthorizationUrl(requestToken)); Verifier verifier = new Verifier("verifier you got from the user"); Token accessToken = service.getAccessToken(requestToken, verifier); OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL); service.signRequest(accessToken, request); response = request.send(); Log.i("OAUTH RESPONSE",response.getBody());
返回的调试输出是:
I/System.out(1776):从http://api.twitter.com/oauth/request_token获取请求令牌
I/System.out(1776):将oauth_callback设置为oob
I/System.out(1776):生成签名...
I/System.out(1776):使用base64编码器:CommonsCodec
I /的System.out(1776):基本字符串是:POST&HTTP%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Doob%26oauth_consumer_key%3DXXXXXXXXXXXXXXXXXXXXX%26oauth_nonce%3D1095830595%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1391024186%26oauth_version %3D1.0
I/System.out(1776):签名为:In0u/SlHz9cr5NLAQK56kALJ3hI =
I/System.out(1776):附加额外的OAuth参数:{oauth_callback - > oob,oauth_signature - > In0u/SlHz9cr5NLAQK56kALJ3hI =,oauth_version - > 1.0,oauth_nonce - > 1095830595,oauth_signature_method - > HMAC-SHA1,oauth_consumer_key - > XXXXXXXXXXXXXXXXXXXX, oauth_timestamp - > 1391024186}
I/System.out(1776):使用Http Header签名
I/System.out(1776):发送请求...
D/dalvikvm(1776):GC_FOR_ALLOC释放174K,3%免费13188K/13575K,暂停134ms
I/System.out(1776):响应状态码:403
I/System.out(1776):响应主体:
W/System.err(1776):java.lang.IllegalArgumentException:响应正文不正确.无法从空字符串中提取令牌
W/System.err(1776):at org.scribe.utils.Preconditions.check(Preconditions.java:84)
W/System.err(1776):at org.scribe.utils.Preconditions.checkEmptyString(Preconditions.java:44)
W/System.err(1776):at org.scribe.extractors.TokenExtractorImpl.extract(TokenExtractorImpl.java:26)
W/System.err(1776):at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:64)
W/System.err(1776):at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:40)
W/System.err(1776):at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:45)
W/System.err(1776):at com.roundmesa.twitter.TwitterLoginTask.doInBackground(TwitterLoginTask.java:45)
W/System.err(1776):at com.roundmesa.twitter.TwitterLoginTask.doInBackground(TwitterLoginTask.java:1)
W/System.err(1776):在android.os.AsyncTask $ 2.call(AsyncTask.java:264)
W/System.err(1776):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)
W/System.err(1776):at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(1776):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
W/System.err(1776):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err(1776):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)
W/System.err(1776):at java.lang.Thread.run(Thread.java:856)
有人发现了这个错误吗?(对于新手来说一定是绝对的,但我找不到类似的东西......
谢谢!
这最近发生在我身上.问题是Twitter开始拒绝常规连接,默认情况下,Scribe不使用SSL.修复非常简单:使用SSL,而不是使用常规的Scribe Twitter API类:
final OAuthService service = new ServiceBuilder() .provider(**TwitterApi.SSL.class**) .apiKey(...) .apiSecret(...) .callback(...) .build();