用Twitter编写奇怪的不受控制的异常

时间:2014-01-29 19:54:55

标签: scribe

我对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)

    请检查此问题:Twitter rejects my Oauth Request using scribe-java with "SSL is required"

      

    由于抄写员的作者有一些反对添加更多和   更多社会Apis,也许github.com/hhru/subscribe(抄写员)   在某些情况下可能是另一种选择。