Spring社交Twitter流未经授权就返回HTTP 401

时间:2015-11-15 13:37:06

标签: spring twitter spring-boot spring-social spring-social-twitter

我尝试使用spring-social-twitter建立与Twitter的流连接,但是当我尝试发出请求时,我已经401 unauthorized

spring-social-twitter正在尝试连接https://stream.twitter.com/1.1/statuses/filter.json。当我调试它并尝试获取response.getBody()时,我已经HttpRetryException收到详细消息:cannot retry due to server authentication, in streaming mode

我有适当的应用授权,但我没有访问令牌的授权,因为我在这里不需要它。我使用1.1.0.RELEASE版本。

我将非常高兴你的帮助!

这是我对流的呼吁:

final Stream stream = twitter.streamingOperations().filter(keywords, listeners);

这是我的简单监听器类:

private class TwitterStreamListener implements StreamListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(TwitterStreamListener.class);

    @Override
    public void onTweet(Tweet tweet) {
        LOGGER.info("onTweet");
    }

    @Override
    public void onDelete(StreamDeleteEvent deleteEvent) {
        LOGGER.info("onDelete");
    }

    @Override
    public void onLimit(int numberOfLimitedTweets) {
        LOGGER.info("onLimit");
    }

    @Override
    public void onWarning(StreamWarningEvent warningEvent) {
        LOGGER.info("onWarning");
    }
}

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。我在这里发布了它,所以也许它可以帮助其他人解决同样的问题。

我发现Twitter在我自己连接之前阻止了我的应用程序进行流式连接,作为应用程序的浏览器客户端。所以我需要接收用户的访问令牌才能建立流连接。

早些时候,当我尝试连接时 - 没有发生任何事情......这是因为我的应用设置中有错误的回拨网址(在推特页面上)。

当我将回拨网址更改为http://127.0.0.1时(它可能是任何类型的有效网址,您的应用程序不需要具有相同的权限,但您不能使用localhost之类的内容)。

之后,我可以将我的应用程序连接到我的Twitter帐户,这允许我开始流式连接。毕竟我不知道为什么Twitter需要用户连接流公共推文。搜索REST API不需要它。