使用Twitter API签署请求

时间:2011-06-06 12:42:11

标签: c# oauth twitter

这是一个让我发疯的问题:下面的代码适用于第一个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方法,第二个是POST方法? 我被困在这里,所以我不知道,谢谢你的帮助;)

1 个答案:

答案 0 :(得分:2)

这只是一个小猜想。

可能的问题1

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

可能的问题2

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

可能的问题3

您是否在每次请求时发送新的nonce?