【问题标题】:Getting a 401 Error when using Twitter API User/Search使用 Twitter API 用户/搜索时出现 401 错误
【发布时间】:2013-06-15 03:52:00
【问题描述】:

我有一个应用程序,它允许用户授权我的应用程序,以便它使用 Twitters REST Api。这个过程很好,但是当我尝试执行 GET 请求来搜索哈希标签时,它就崩溃了。我使用的文档如下https://dev.twitter.com/docs/api/1.1/get/search/tweets

所以首先我检查了我的 Signature Base 与 Twitter 的 Generate one。

我的

GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fsearch%2Ftweets.json&oauth_consumer_key%3Dik7trnFwjZ1aoQBajjLv9A%26oauth_nonce%3D500199554%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1360688610%26oauth_token%3D932308590-5KAmpqMDIOC9tcrhVSfwCxMz0ye8BXmhKSQyPb97%26oauth_version%3D1.0%26q%3D%2523ireland

推特

GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Fsearch%2Ftweets.json&oauth_consumer_key%3Dik7trnFwjZ1aoQBajjLv9A%26oauth_nonce%3D8522ba23a34a6748d7bd6e2e5b68c56f%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1360681312%26oauth_token%3D932308590-5KAmpqMDIOC9tcrhVSfwCxMz0ye8BXmhKSQyPb97%26oauth_version%3D1.0%26q%3D%2523ireland

这些看起来相当相似,唯一的区别是生成的随机数(不确定这是否有问题)。现在我觉得奇怪的一件事是请求是

https://api.twitter.com/1.1/search/tweets.json?q=%23ireland

但是通过查看 Twitters OAuth 工具中的签名库,我必须删除 ?从生成Signuatre Base时的那个请求开始,这看起来很奇怪。

接下来是我的授权标头

我的

Authorization: OAuth oauth_consumer_key="ik7trnFwjZ1aoQBajjLv9A", oauth_nonce="500199554", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1360688610", oauth_token="932308590-5KAmpqMDIOC9tcrhVSfwCxMz0ye8BXmhKSQyPb97", oauth_version="1.0", oauth_signature="aSytUd6HrwAzzAzDyP%2FMqL2qNCE%3D"

推特

Authorization: OAuth oauth_consumer_key="ik7trnFwjZ1aoQBajjLv9A", oauth_nonce="8522ba23a34a6748d7bd6e2e5b68c56f", oauth_signature="bw0My7Z3ESXDOjsTLYgbTIjGi6s%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1360681312", oauth_token="932308590-5KAmpqMDIOC9tcrhVSfwCxMz0ye8BXmhKSQyPb97", oauth_version="1.0"

唯一的区别是我的签名顺序不同,但是我没有看到任何说明它必须完全匹配的文档。

所以最后我设置了我的实际请求,这很简单

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            request.Headers["Authorization"] = headers;
            HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

其中的 URL 就是上面提到的 URL。当我的方法运行时,我得到 401 响应

[System.Net.WebException] = {"The remote server returned an error: (401) Unauthorized."}

有人发现我的实现有什么问题或者我可能错过了什么吗?

【问题讨论】:

  • 这里有同样的问题。所有其他 1.1 端点对我来说都没有问题,但搜索端点却没有。我完全一无所知。

标签: c# twitter windows-runtime twitter-oauth


【解决方案1】:

对于您的授权标头,我读到您应该按字母顺序排列它们。您的 oauth_version 和 oauth_signature 与 twitter 的顺序不同。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2020-06-05
    • 2020-07-09
    • 2015-04-09
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2016-03-18
    相关资源
    最近更新 更多