使用Twitter API签名请求

本文关键字:请求 API Twitter 使用 | 更新日期: 2023-09-27 17:58:25

有一个问题让我抓狂:下面的代码适用于第一个URL(查找),但不适用于第二个URL(更新状态)。我的请求出现签名错误。。。

url = string.Format("http://api.twitter.com/1/users/lookup.xml?screen_name={0}", myOAuth.UrlEncode("someuser"));
url = string.Format("http://api.twitter.com/1/statuses/update.xml?status={0}", myOAuth.UrlEncode("bla bla bla"));
string oAuthSignature = myOAuth.GenerateSignature(new Uri(url), consumerKey, consumerSecret, token, tokenSecret, httpMethod, timeStamp, nonce, signatureType, out normalizedUrl, out normalizedRequestParameters);
string encodedSign = myOAuth.UrlEncode(oAuthSignature);
// Rebuild query url with authorization
this.richTextBox1.Text = string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedRequestParameters, encodedSign);

可能是因为第一个url是GET方法,第二个url是POST方法?我被困在这里,所以我有任何想法,感谢你的帮助;)

使用Twitter API签名请求

这只是一个小猜想。

可能的问题1

只有当实际将更新api作为POST请求发送(而不仅仅是将其作为POST请求签名)时,更新api才会工作。当twitter重新创建您的签名以验证您发送的签名时,它会检查使用哪个http方法发送请求,并使用该信息创建签名基字符串。因此,如果您在签名基字符串中创建了一个带有"POST"的签名,但实际上将其作为GET发送。。。它不起作用。

可能的问题2

如果您正在发送POST请求,那么另一个可能的问题是您没有将POST用作签名基字符串的一部分。当您调用myOauth.GenerateSignature时,在第二种情况下,您将发送什么作为httpMethod参数?由于http方法(GET或POST)是签名基字符串的一部分。这需要相应地设定。

可能的问题3

你是不是每次请求都会发送一个新的nonce?