【问题标题】:Forbidden (error 403) while sending request to Twitter API向 Twitter API 发送请求时被禁止(错误 403)
【发布时间】:2016-05-16 18:31:21
【问题描述】:

我想使用 GET statuses/home_timeline 获取推文列表。我的资源 URL 没有任何附加参数。当我发送请求时,我收到错误 Forbidden。以下部分代码

  public async Task<BindableCollection<Tweet>> Execute()
    {
        string uri = "https://api.twitter.com/1.1/statuses/home_timeline.json";

        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Host", "api.twitter.com");
        client.DefaultRequestHeaders.Add("Authorization", info.TokenType + ' ' + info.AccessToken);

        HttpResponseMessage responce = new HttpResponseMessage();

        while (true)
        {
            try
            {
                responce = await client.GetAsync(uri);
                break;
            }
            catch { Debug.WriteLine("ERROR!"); }
        }

info.TokenTypeinfo.AccessToken 包含“承载”和我的访问令牌 按照。 Appropriate photo

当我使用这个参数(TokenType 和 AccessToken)发送请求(GET statuses / USER_timeline)时,我得到了正确的答案。

对此有何想法?

【问题讨论】:

    标签: c# api twitter


    【解决方案1】:

    您需要区分 HomeTimeline 和 UserTimeline。

    • HomeTimeline 是当前经过身份验证的用户的时间线,因此您必须具有用户特定的身份验证。
    • UserTimeline 是特定用户的公共时间线,您可以使用 Application-Only 身份验证。

    Tweetinvi 可以非常直接地访问这两者:

    var tweets = Timeline.GetHomeTimeline();
    // OR
    var tweets = Timeline.GetUserTimeline(<user_identifier>);
    

    Timeline documentation

    对于身份验证,您还需要 1 行:

    // User authentication
    Auth.SetUserCredentials("CONSUMER_KEY", "CONSUMER_SECRET", "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET");
    // Application-Only authentication
    Auth.SetApplicationOnlyCredentials("CONSUMER_KEY", "CONSUMER_SECRET", true);
    

    Authentication documentation

    如果有任何帮助,请告诉我。

    【讨论】:

      【解决方案2】:

      HOME_timeline 需要用户身份验证,而不是应用程序身份验证,后者可以与 User_timeline 一起使用。您是否使用应用程序凭据进行身份验证?

      来自the docs

      “使用仅限应用程序的身份验证,您没有经过身份验证的用户的上下文,这意味着对需要用户上下文的端点的任何 API 请求(例如发布推文)都将不起作用。但是,端点集仍然可用的可以有更高的速率限制。”

      【讨论】:

        【解决方案3】:

        正如 Ian Nelson 所说,您需要获得授权才能访问您的时间线。但是您可以使用LinqToTwitter 来获取推文列表。

         var tweets = from tweet in twitterContext.Status
                        where tweet.Type == StatusType.User
                              && tweet.ScreenName == "Goofy"
                        select tweet;
        

        【讨论】:

        • 所以我无法在我的应用程序中使用仅应用程序身份验证获得home_timeline。但是我想得到home_timeline,我该怎么做呢?
        • @MAXIMAN 您可以下载演示,并且在 Wiki 中有文档。尝试 SingleUserAuthorizer 并从您的 Twitter 应用页面获取 AccessToken/AccessTokenSecret:github.com/JoeMayo/LinqToTwitter
        猜你喜欢
        • 2019-09-03
        • 2013-04-05
        • 2015-09-10
        • 2019-08-07
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多