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

本文关键字:禁止 错误 请求 Twitter API | 更新日期: 2023-09-27 18:33:40

我想使用 GET statuses/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包含"持有者"和我的访问令牌符合。适当的照片

当我使用此参数(令牌类型和访问令牌)发送请求(GET状态/USER_timeline)时,我得到了正确的答案。

对此有什么想法吗?

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

你需要

区分HomeTimeline和UserTimeline。

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

Tweetinvi提供了对这两个的非常直接的访问:

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

时间线文档

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

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

身份验证文档

让我知道这是否有任何帮助。

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

从文档中:

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

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

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