我对Scribe很新,但是当我尝试通过Twitter进行身份验证时,一个奇怪的错误就会上升。
我的代码与TwitterExample几乎相同:
OAuthService service = new ServiceBuilder()
.provider(TwitterApi.class)
.apiKey("XXXXXXXXXXXXXX<<custom>>XXXXXXXXXXXXXXX")
.apiSecret("YYYYYYYYYYYYYYYY<<custom>>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&amp; http%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&amp; 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 - &gt; oob,oauth_signature - &gt; In0u / SlHz9cr5NLAQK56kALJ3hI =,oauth_version - &gt; 1.0,oauth_nonce - &gt; 1095830595,oauth_signature_method - &gt; HMAC-SHA1,oauth_consumer_key - &gt; XXXXXXXXXXXXXXXXXXXX,oauth_timestamp - &gt; 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)<< li>
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)<< li>
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)<< li>
其他人发现了这个错误? (对于新手来说一定是绝对的,但我找不到类似的东西......
谢谢!
3 个答案:
答案 0 :(得分:6)
最近这件事发生在我身上。问题是Twitter开始拒绝常规连接,默认情况下,Scribe不使用SSL。修复非常简单:使用SSL one:
,而不是使用常规的Scribe Twitter API类
final OAuthService service = new ServiceBuilder()
.provider(**TwitterApi.SSL.class**)
.apiKey(...)
.apiSecret(...)
.callback(...)
.build();
答案 1 :(得分:4)
我收到同样的错误,我在我的android代码中使用了scribe 1.1.0 jar ..
最终OAuthService服务=新的ServiceBuilder()
.provider( TwitterApi.SSL.class ) - &gt;我们在这里使用的确切类名是什么..我的jar只有TwitterApi
答案 2 :(得分:0)