【问题标题】:Signing requests with Twitter API使用 Twitter API 签署请求
【发布时间】:2011-06-08 16:06:07
【问题描述】:

这是一个让我发疯的问题:下面的代码非常适合第一个 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 方法,第二个是 POST 方法? 我被困在这里,所以我有任何想法,谢谢你的帮助;)

【问题讨论】:

  • 如果您不发布 GenerateSignature 方法的代码,您将得到的只是猜测。

标签: c# oauth twitter


【解决方案1】:

这只是一个小小的猜想。

可能的问题 1

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

可能的问题2

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

可能的问题3

您是否为每个请求发送一个新的随机数?

【讨论】:

  • 感谢您的帮助。但是我的问题根本不在签名请求过程中,http方法和生成的签名是正确的。实际上,我必须在发送请求之前精确地使用 http 方法: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = method.ToString();
  • 事实上,这是我上面概述的问题之一。您没有将其作为 POST 请求发送?
  • 该死!我怎么了??是的,您首先为我指明了正确的方向,我一定是盲目/愚蠢/疲倦没有看到它,或者误解了它......我想我在这个 API 上工作了太多......谢谢;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2021-06-03
相关资源
最近更新 更多