【问题标题】:Forbidden access when calling twitter api geo/search.json调用 twitter api geo/search.json 时禁止访问
【发布时间】:2017-10-03 10:36:21
【问题描述】:

我是使用 twitter API 的新手,我已经成功调用了:

https://api.twitter.com/1.1/statuses/user_timeline.json

api.twitter.com/1.1/followers/list.json

但是当我打电话时:

https://api.twitter.com/1.1/geo/search.json?query=Pakistan

我获得禁止访问权限。

以下是我的要求:

Method: GET, RequestUri: 'https://api.twitter.com/1.1/geo/search.json?query=Pakistan', Version: 1.1, Content: , Headers:
{
Authorization: Bearer xxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzz%aaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbb
}

我得到的回应是:

StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
strict-transport-security: max-age=631138519
x-connection-hash: 3a7f405036803861a700cef30f7b1e7f
x-response-time: 107
Date: Fri, 05 May 2017 03:18:15 GMT
Set-Cookie: guest_id=v1%3A149395429589966721; Domain=.twitter.com; Path=/; Expires=Sun, 05-May-2019 03:18:15 UTC
Server: tsa_o
Content-Length: 91
Content-Type: application/json; charset=utf-8
}

如果您有兴趣查看我正在使用的 C# 代码,请点击此处:

    public async Task<IEnumerable<string>> GetTweetsByLatLong(double latitude, double longitude, int count, string accessToken = null)
    {
        if (accessToken == null)
        {
            accessToken = await GetAccessToken();
        }

        var requestUserTimeline = new HttpRequestMessage(HttpMethod.Get, string.Format("https://api.twitter.com/1.1/geo/search.json?query=Pakistan"));
        requestUserTimeline.Headers.Add("Authorization", "Bearer " + accessToken);
        var httpClient = new HttpClient();
        HttpResponseMessage responseUserTimeLine = await httpClient.SendAsync(requestUserTimeline);
        if (responseUserTimeLine.IsSuccessStatusCode)
        {
            var serializer = new JavaScriptSerializer();
            dynamic json = ((serializer.Deserialize<object>(await responseUserTimeLine.Content.ReadAsStringAsync())) as Dictionary<string, object>).Values.ElementAt(0);
            //new System.Collections.Generic.Mscorlib_DictionaryValueCollectionDebugView<string, object>((json as Dictionary<string, object>).Values).Items[0]
            var enumerableTwitts = (json as IEnumerable<dynamic>);

            if (enumerableTwitts == null)
            {
                return null;
            }
            return enumerableTwitts.Select(t => (string)(t["name"].ToString()));
        }
        else
        {
            return new string[] { responseUserTimeLine.ToString() };
        }
    }
   
   public async Task<string> GetAccessToken()
    {
        var httpClient = new HttpClient();
        var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitter.com/oauth2/token ");
        var customerInfo = Convert.ToBase64String(new UTF8Encoding().GetBytes(OAuthConsumerKey + ":" + OAuthConsumerSecret));
        request.Headers.Add("Authorization", "Basic " + customerInfo);
        request.Content = new StringContent("grant_type=client_credentials", Encoding.UTF8, "application/x-www-form-urlencoded");

        HttpResponseMessage response = await httpClient.SendAsync(request);

        string json = await response.Content.ReadAsStringAsync();
        var serializer = new JavaScriptSerializer();
        dynamic item = serializer.Deserialize<object>(json);
        return item["access_token"];
    }

【问题讨论】:

  • 发布您的 API 密钥(如果它是个人的)不是一个好主意 - 如果它是您的私有 API 密钥,请尽快删除它。
  • 谢谢@J.N.我很困惑我的标题是否不正确我需要一些特殊权限还是什么

标签: c# api twitter


【解决方案1】:

我相信这是因为您通过提供 Bearer 令牌来使用仅限应用程序的身份验证。

请参阅两者中的“需要身份验证”

https://dev.twitter.com/rest/reference/get/geo/searchhttps://dev.twitter.com/rest/reference/get/statuses/user_timeline

阅读https://dev.twitter.com/oauth

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 2019-04-13
    • 2018-03-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    相关资源
    最近更新 更多