在向Twitter API发送请求时禁止(错误403)

时间:2016-02-06 21:48:35

标签: c# api twitter

我想使用GET状态/ home_timeline 获取推文列表。我的资源URL没有任何其他参数。当我发送请求时,我收到错误禁止。

下面代码的一部分
  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包含“bearer”和我的访问令牌 按照 Appropriate photo

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

有关于此的任何想法吗?

3 个答案:

答案 0 :(得分:1)

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

来自the docs

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

答案 1 :(得分:1)

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

return

答案 2 :(得分:0)

您需要区分HomeTimeline和UserTimeline。

  • HomeTimeline是当前经过身份验证的用户的时间轴,因此您必须具有用户特定的身份验证。
  • UserTimeline是特定用户的公共时间轴,您可以使用仅应用程序身份验证。

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

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