【问题标题】:twitter4j: 401 authentication credentials missing or incorrecttwitter4j:401 身份验证凭据丢失或不正确
【发布时间】:2011-08-17 15:17:58
【问题描述】:

我目前正在尝试获取一组用户的 userTimeline。这在过去对我有用,但现在不再有效。我正在使用 twitter4j 并使用 oauth。到目前为止,我已经在我的帐户上注册了 2 个应用程序,它们都应该能够访问 twitter-api。但是,从昨天开始,我收到了 401 - 身份验证redentials 丢失或不正确(尝试了两个应用程序)。 Twitter 是否对 API 进行了任何最近的更改?我应该设置一个新的推特帐户吗?创建应用程序并允许其访问您自己的帐户是否合适?

这是代码:

ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
      .setOAuthConsumerKey("q...w")
      .setOAuthConsumerSecret("R...o")
      .setOAuthAccessToken("2...7")
      .setOAuthAccessTokenSecret("O....8");

  TwitterFactory tf = new TwitterFactory(cb.build());

    Twitter twitter = tf.getInstance();
  for ( Map.Entry<Long, String> entry : tmls.entrySet()) {

        long uid = entry.getKey();

        Paging paging = new Paging(1, count);

        ResponseList<Status> rls;

        try {
            rls = twitter.getUserTimeline(uid, paging);

            for ( int j = 0 ; j < rls.size() ; j++ ) {

                if (false == ltindex.contains(uid)) {


                    alsa.add(new String[] {  String.valueOf( rls.get(j).getId() ) , String.valueOf( uid ), rls.get(j).getText() , "", entry.getValue(), String.valueOf( rls.get(j).getCreatedAt().getTime() )  });

                }

            }


        } catch (TwitterException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

  }

错误:

  401:Authentication credentials (http://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid conumer key/secret, access token/secret, and the system clock in in sync.
  error - Not authorized
  request - /1/statuses/user_timeline.json?user_id=14221532&include_rts=true&include_entities=false&count=10&page=1
  Relevant discussions can be on the Internet at:
    http://www.google.co.jp/search?q=ced778ef or
    http://www.google.co.jp/search?q=10a1ea9d
  TwitterException{exceptionCode=[ced778ef-10a1ea9d], statusCode=401, retryAfter=0, rateLimitStatus=RateLimitStatusJSONImpl{remainingHits=273, hourlyLimit=350, resetTimeInSeconds=1304422, secondsUntilReset=845, resetTime=Tue May 03 11:36:48 UTC 2011}, version=2.2.3-SNAPSHOT(build: ddf24547632bf3a28b899e3d75b110de43f71c0f)}
    at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:189)
    at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65)
    at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:85)
    at twitter4j.TwitterImpl.get(TwitterImpl.java:1738)
    at twitter4j.TwitterImpl.getUserTimeline(TwitterImpl.java:246)
    at getExpertTweets.getSpecificOpinions(getExpertTweets.java:89)
    at classifyTweet.main(classifyTweet.java:57)
  root@se1:~# sudo ntpdate pool.ntp.org

【问题讨论】:

  • 是的,我已经用 ntpdate pool.ntp.org 更新了几次
  • 更新:这似乎只发生在某些用户身上。 twitter 似乎在无授权和无身份验证方面有所区别。没有授权是否意味着时间线是私人的?
  • 是的,这几乎可以肯定意味着时间线是私人的,并且您没有被授予关注相关用户的权限。

标签: java twitter twitter4j


【解决方案1】:

我有同样的问题。我使用的消费者密钥和消费者秘密是正确的,并且我的机器是同步的。问题是我在 dev.twitter.com 上注册我的应用程序时没有设置回调 URL。一旦我设置好了,一切都正常了。

【讨论】:

  • 如何设置callback_url,它说无效的url。我使用的格式任何东西://twitter
【解决方案2】:

Consumer key 和 Token 有问题。按照步骤操作。

登录https://dev.twitter.com/ 并转到我的应用程序意味着您尊敬的应用程序。 并转到设置和更改访问权限 只读 到 读取、写入和直接发送消息

并更新数据,如果未更新,则重新创建令牌并更新数据和您的程序。并运行该程序并确保您的 lib 文件夹中包含该程序的所有 jar 文件。 问题就解决了。

【讨论】:

  • 5 年后问题仍然存在。不幸的是,这从来都不是解决方案。
【解决方案3】:

我想我会分享这个以防它帮助某人在谷歌上搜索此异常消息。

在测试 JSF 应用程序的 Twitter 身份验证时,我尝试了以下用例:

打开 Twitter 身份验证窗口。 输入正确的凭据并登录。

成功了。于是我尝试了:

打开 Twitter 身份验证窗口。 关闭 Twitter 身份验证窗口。 再次打开 Twitter 身份验证窗口。 输入正确的凭据并点击登录。

后者总是导致 401 身份验证凭据丢失或错误异常。

我的问题是服务器正在重新启动 Twitter 身份验证过程,但 RequestToken.getAuthenticationURL() 的值未正确传递回 UI,并导致它使用旧 URL 调用 Twitter API。

简而言之,确保客户端使用的身份验证 URL 与服务器期望的匹配。

【讨论】:

    【解决方案4】:

    今天 02.05.2015 我在使用 twitter4j 3.0.x 版本时遇到了类似的错误。

    在将 twitter4j 更新到 4.0.0 版本之前,我得到了它。

      <dependencies>
      <dependency>
          <groupId>org.twitter4j</groupId>
          <artifactId>twitter4j-core</artifactId>
          <version>[4.0,)</version>
      </dependency>
      ...
    

    【讨论】:

      【解决方案5】:

      我在正确的系统时间和 API 密钥/秘密方面也遇到了这个问题。

      原来需要将Callback URL设置为https://api.twitter.com/oauth/request_token 设置后 - 您将看到 Twitter 授权屏幕。

      您也可以按“测试 OAuth”使用 OAuth 工具对其进行测试,并将 https://api.twitter.com/oauth/request_token 作为 POST 请求的请求 URI。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题,我已修复,如果设备日期和时间不正确,则会出现此问题..

        【讨论】:

          【解决方案7】:

          检查您的所有身份验证凭据是否正确 a) 消费者密钥 b) 消费者秘密 c) 访问令牌 d) accessTokenSecret 如果以上都正确,它应该可以工作。

          另一种可能是您的系统不同步。例如,如果您在几个小时不活动后在虚拟框中运行,您的系统就会失去同步。请重新启动系统,然后重试。

          您可以使用以下 build.sbt 文件

          验证依赖项
          name := "sparkstreamingexamples"
          version := "1.0"
          scalaVersion := "2.11.7"
          libraryDependencies ++= Seq(
            "org.apache.spark" %% "spark-streaming" % "2.0.1",
            "org.apache.bahir" %% "spark-streaming-twitter" % "2.0.1",
          "org.twitter4j" % "twitter4j-core" % "4.0.4"
          )
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-08-22
            • 2016-02-20
            • 2016-01-10
            • 1970-01-01
            • 2014-01-05
            • 1970-01-01
            • 2014-01-20
            • 1970-01-01
            相关资源
            最近更新 更多