【问题标题】:401 Auth error retrieving tweets检索推文时出现 401 Auth 错误
【发布时间】:2015-12-15 21:32:04
【问题描述】:

我有一个每天运行的应用程序,并且已经运行了几个月。它使用的是 twitter4j v3.0.3。

几周前,它开始抛出常见的 401 异常:

401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
{"request":"\/1.1\/statuses\/user_timeline.json","error":"Not authorized."}

Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=4be80492 or
    http://www.google.co.jp/search?q=0a6306df
TwitterException{exceptionCode=[4be80492-0a6306df], statusCode=401, message=null, code=-1, retryAfter=-1, rateLimitStatus=RateLimitStatusJSONImpl{remaining=112, limit=180, resetTimeInSeconds=1448156737, secondsUntilReset=428}, version=4.0.4}
    at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
    at twitter4j.HttpClientBase.request(HttpClientBase.java:57)

我已更新到 v4.0.4(撰写本文时的最新版本)并确认所有访问和客户端令牌的正确性。我也尝试过创建一个全新的应用程序并使用这些令牌。我已经同步了我的系统时钟。一切都无济于事。

我的来源:

val config = new ConfigurationBuilder()
  .setOAuthConsumerKey(conf.getString("twitter.api.key"))
  .setOAuthConsumerSecret(conf.getString("twitter.api.secret"))
  .setOAuthAccessToken(conf.getString("twitter.access.token"))
  .setOAuthAccessTokenSecret(conf.getString("twitter.access.secret"))
  .build()

val twitter = new TwitterFactory(config).getInstance

def statuses(handle: String, since: Long): Stream[Status] = {
  @tailrec
  def loop(page: Int, acc: Stream[Status]): Stream[Status] = {
    val paging = new Paging(page, since)
    val xs = twitter.getUserTimeline(handle, paging).iterator().asScala.toSeq
    val stream = Stream.concat(acc, xs.filterNot(_.getText.startsWith("@")).filterNot(_.getText.startsWith("RT ")).toStream)
    if (xs.size < 20) stream
    else loop(page + 1, stream)
  }
  loop(1, Stream.empty)
}

它在twitter.getUserTimeline 失败。

如果代码、配置或我的 Twitter 帐户中没有任何更改,为什么会失败?

我已经排除了键和时钟同步。我还能看什么?

整个项目可在https://github.com/Synesso/tweet-mail 进行测试(根据自述文件,它需要一些设置 - 但可能不需要 smtp 设置)。

【问题讨论】:

  • 您可能需要一个新版本的catcert.pem,例如github.com/jublonet/codebird-php/blob/develop/src/cacert.pem - 包含来自 Twitter 的最新证书数据。
  • 我添加了信任证书dev.twitter.com/overview/api/ssl _ Symantec Class 3 Secure Server CA - G4 root certificate with serial: 51:3f:b9:74:38:70:b7:34:40:41: 8d:30:93:06:99:ff_ 到我的系统,但它仍然失败。有没有办法我可以通过 twitter4j api 只为应用程序信任它?
  • 我需要将它添加到 JRE cacerts。谢谢特伦斯。

标签: twitter twitter4j


【解决方案1】:

(将我的评论转换为答案。)

为了安全连接到 Twitter,您需要最新版本的 cacert.pem

您可以在 https://github.com/jublonet/codebird-php/blob/develop/src/cacert.pem 找到它 - 其中包含允许您连接到 Twitter 的最新证书。

您可以在https://dev.twitter.com/overview/api/ssl找到 Twitter 证书的详细信息

根据您的操作系统和编程语言,您需要将文件放在可读位置或在本地安装。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2011-09-04
  • 1970-01-01
  • 2021-05-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多