Twitter API无效或令牌已过期

佐里安

我正在尝试使用下面的代码,但是由于某种原因,我得到了无效或过期的令牌,它似乎可以工作一次,但是再也无法工作了。

有任何想法吗?(consumerKey和consumerSecret是在类中生成的常量。)

    public ActionResult Index()
    {
        string twitterAccount = System.Configuration.ConfigurationManager.AppSettings["twitterAccount"];
        JsonDeserializer jsonDeserializer = new JsonDeserializer();
        var model = new TwitterVM.LandingModel();

        var qs = GetToken();
        string oauthToken = qs["oauth_token"];
        string oauthTokenSecret = qs["oauth_token_secret"];

        RestClient client = new RestClient("https://api.twitter.com/1.1")
        {
            Authenticator = OAuth1Authenticator.ForProtectedResource(consumerKey, consumerSecret, oauthToken, oauthTokenSecret)
        };
        RestRequest request = new RestRequest("statuses/user_timeline", Method.GET);

        request.Parameters.Add(new Parameter()
        {
            Name = "screen_name",
            Value = twitterAccount,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "count",
            Value = 10,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "include_rts",
            Value = true,
            Type = ParameterType.GetOrPost
        });

        request.Parameters.Add(new Parameter()
        {
            Name = "include_entities",
            Value = true,
            Type = ParameterType.GetOrPost
        });

        IRestResponse response = client.Execute(request);

        model.Tweets =
          jsonDeserializer.Deserialize<List<TwitterVM.Tweet>>(response);

        return View(model);
    }


    private NameValueCollection GetToken()
    {
        RestClient client = new RestClient("https://api.twitter.com") { Authenticator = OAuth1Authenticator.ForRequestToken(consumerKey, consumerSecret) };
        //Do the auth shit...
        RestRequest request = new RestRequest("oauth/request_token", Method.POST);
        IRestResponse response = client.Execute(request);

        return HttpUtility.ParseQueryString(response.Content);
    }
工作

使用Twitter的OAuth2 API(https://api.twitter.com/oauth2/token

有关详细信息,请参阅https://dev.twitter.com/oauth/application-only

var client = await CreateHttpClient("....", "....");
//don't dispose this client and use for subsequent API calls

var screenName = "....";
var count = 10;
var include_rts = true;
var url = $"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name={screenName}&include_rts={include_rts}&count={count}";

var json = await client.GetStringAsync(url);

public static async Task<HttpClient> CreateHttpClient(string consumerKey, string consumerSecret)
{
    var bearerToken = Convert.ToBase64String(Encoding.UTF8.GetBytes(consumerKey + ":" + consumerSecret));
    string url = "https://api.twitter.com/oauth2/token";


    HttpClient client = new HttpClient();

    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Basic " + bearerToken);

    var resp = await client.PostAsync(url, new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded")).ConfigureAwait(false);
    resp.EnsureSuccessStatusCode();
    var result = await resp.Content.ReadAsStringAsync().ConfigureAwait(false);
    var jObj = new JavaScriptSerializer().Deserialize<Dictionary<string,string>>(result);

    if (jObj["token_type"] != "bearer") throw new Exception("Invalid Response From Twitter/OAuth");

    client.DefaultRequestHeaders.Remove("Authorization");
    client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + jObj["access_token"]);
    return client;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Twitter API返回“无效或过期的令牌”。

来自分类Dev

Pinterest API访问令牌已过期

来自分类Dev

Pinterest API访问令牌已过期

来自分类Dev

Twitter OAuth-无效或过期的访问令牌

来自分类Dev

Linq to Twitter-无效/过期的令牌

来自分类Dev

Twitter OAuth:无效或过期的令牌[不可重复]

来自分类Dev

Swift:提供的Facebook会话令牌已过期或无效

来自分类Dev

提供的Facebook会话令牌已过期或无效

来自分类Dev

访问令牌已过期

来自分类Dev

Google Sheet API访问令牌已过期

来自分类Dev

facebook api 访问令牌:会话已过期

来自分类Dev

Azure ServiceBus令牌已过期

来自分类Dev

Laravel:JWT 令牌已过期

来自分类Dev

递归-令牌无效或已过期-如何查找有关错误消息的更多信息

来自分类Dev

如果Apollo GraphQL令牌无效或已过期,则NextAuth.js注销

来自分类Dev

尝试在服务器端验证华为订阅时出现“令牌已过期或无效”

来自分类Dev

社交API Facebook iOS:“验证访问令牌时出错:会话已过期”

来自分类Dev

Twitter oAuth无效的请求令牌

来自分类Dev

TestFlight已过期

来自分类Dev

请求中包含的安全令牌已过期

来自分类Dev

确定承载令牌是否已过期或刚刚被授权

来自分类Dev

JWT php可能已过期的Base 64解码令牌

来自分类Dev

PHP:Dropbox令牌已过期或不存在

来自分类Dev

Ubuntu 15.10。Rhythmbox + last.fm =令牌已过期

来自分类Dev

错误:身份验证令牌在 Firebase 中已过期

来自分类Dev

从android发送时令牌显示已过期

来自分类Dev

S3“根据策略无效:策略已过期”

来自分类Dev

Twitter API:Twitter 用户的年龄

来自分类Dev

我们如何识别Box api中的访问令牌已过期?有委托方法吗?

Related 相关文章

热门标签

归档