【问题标题】:Twitter OAuth issue: error 401Twitter OAuth 问题:错误 401
【发布时间】:2014-02-11 08:13:57
【问题描述】:

我正在努力让 Twitter 工作。

我收到的错误是: 授权失败(服务器回复 401)。如果使用者密钥不正确或签名不匹配,则可能会发生这种情况

我已经在这里检查了很多相同的问题,在 stackoverflow 和这里我已经尝试过: 1)检查消费者密钥(与dev.twitter.com上的相同) 2) 在 dev.twitter.com 上为我的应用添加回调 URL 3) 将库更新为 twitter-4j-core-3.0.5.jar 4) 检查我的平板时间是否正确(设置东欧时间)

我还必须说,几个月前 Twitter 在应用程序中运行正常。然后不知何故坏了。

这是我的代码:

class GetOAuthVerifierTask extends AsyncTask<Void, Void, String> {
    private Context context;

    public GetOAuthVerifierTask(Context context) {
        this.context = context;
        dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
    }

    @Override
    protected String doInBackground(Void... params) {
        TwitterUtils twitterUtils = TwitterUtils.getInstance();

        OAuthConsumer consumer = twitterUtils.createConsumer();
        OAuthProvider provider = twitterUtils.createProvider();
        try {
            final String url = provider.retrieveRequestToken(consumer,
                            twitterUtils.getCallbackURL(context));
            twitterUtils.setConsumerToken(context, consumer.getToken());
            twitterUtils.setConsumerSekretToken(context, consumer.getTokenSecret());

            return url;
        } catch (Exception e) {
            Logger.debug("Can not retrieve request token");
            Logger.error(e.getMessage(), e);
            return null;
        }
    }

    @Override
    protected void onPostExecute(String url) {
        dialog.dismiss();
        if (url != null){
             // HERE IT WORKS CORRECT
             web.loadUrl(url);
        }

        else{
            Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
                    Toast.LENGTH_LONG).show();
        }

    }
}

class GetAccessTokenTask extends AsyncTask<Uri, Void, Boolean> {
    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
    }

    @Override
    protected Boolean doInBackground(Uri... params) {
        TwitterUtils twitterUtils = TwitterUtils.getInstance();

        String oauthVerifier = params[0].getQueryParameter(OAuth.OAUTH_VERIFIER);

        OAuthConsumer consumer = twitterUtils.createConsumer();
        consumer.setTokenWithSecret(twitterUtils.getConsumerToken(TwitterActivity.this),
                        twitterUtils.getConsumerSekretToken(TwitterActivity.this));
        OAuthProvider provider = twitterUtils.createProvider();
        try {
            provider.retrieveAccessToken(consumer, oauthVerifier);

            twitterUtils.setAccessToken(TwitterActivity.this, consumer.getToken());
            twitterUtils.setAccessTokenSecret(TwitterActivity.this, consumer.getTokenSecret());
        } catch (Exception e) {
            Logger.debug("Can not retrieve access token");
            Logger.error(e.getMessage(), e);
            return false;
        }

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        dialog.dismiss();
        if (result) {
            TwitterActivity.this.sendMessage();
            TwitterActivity.this.finish();
        } else {
            // HERE I GET 401
            Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
                            Toast.LENGTH_LONG).show();
        }
    }
}

【问题讨论】:

    标签: android twitter oauth twitter-oauth twitter4j


    【解决方案1】:

    刚刚找到解决方案: 我加了一行 提供者.setOAuth10a(true); (对于我的 OAuthProvider)

    在源码中找到了解释: // 1.0a 期望在获取请求令牌时发送回调。 // 1.0 服务提供者会简单地忽略这个参数。

    【讨论】:

      【解决方案2】:

      上个月,一直是change to the Twitter API。您现在可以使用 HTTPS 调用它。

      您应该确保您/您的图书馆使用的 URL 以

      开头
      https://api.twitter.com/1.1/
      

      (注意http之后的额外s。)

      您可能需要咨询 twitter4j 的维护者。

      【讨论】:

      • 感谢您的回答,特伦斯。
      • 我尝试将 REQUEST_TOKEN_URL、ACCESS_TOKEN_URL 和 AUTORIZE_URL 的路径开头替换为“api.twitter.com/1.1”,但在这种情况下,我什至无法访问登录 Twitter 页面。 (以前是可能的)。还尝试更改 dev.twitter.com 上的请求 URI(在 OAuth 工具部分) - 但它不保存此类设置。只能看到此类请求的 oauth 签名。将 URL 更改为“api.twitter.com/1.1”时,我应该做些什么吗?
      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 2011-04-02
      • 2014-07-04
      • 1970-01-01
      • 2011-07-16
      • 2011-02-22
      相关资源
      最近更新 更多