resp = (HttpWebResponse) request.GetResponse (); Хорошо, я знаю, что это, вероятно, какая-то глупая ошибка, или просто я не очень хорошо разбираюсь в вещах Oauth, но я остановился и не знаю, куда идти дальшеПосле многих поисков и попыток я скромно прошу помощи.
Я пытаюсь получить токен запроса от Twitter, чтобы попытаться получить твиттеры пользователей, я не могу использовать библиотеку по другим деловым причинам ...
Вот код на данный момент:
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("oauth_callback", "www.url.com/redirect.aspx");
parameters.Add("oauth_consumer_key", <Consumer_KEY>);
parameters.Add("oauth_nonce", generateNonce());
parameters.Add("oauth_signature_method", "HMAC-SHA1");
parameters.Add("oauth_timestamp", CurrentUNIXTimestamp.Get());
parameters.Add("oauth_version", "1.0");
parameters = parameters.OrderBy(x => x.Key).ToDictionary(v => v.Key, v => v.Value);
string concat = "";
string OAuthHeader = "OAuth ";
foreach (string k in parameters.Keys)
{
if (k == "oauth_callback")
{
concat += k + "%3D" + EncodeToUpper(parameters[k]) + "%26";
OAuthHeader += k + "=" + "\"" + EncodeToUpper(parameters[k]) + "\", ";
}
else
{
concat += k + "%3D" + parameters[k] + "%26";
OAuthHeader += k + "=" + "\"" + parameters[k] + "\", ";
}
}
concat = concat.Remove(concat.Length - 3, 3);
concat = "POST&" + EncodeToUpper("https://api.twitter.com/oauth/request_token" ) + "&" + concat;
//byte[] content = Encoding.UTF8.GetBytes(concat);
HMACSHA1 hmacsha1 = new HMACSHA1();
hmacsha1.Key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", EncodeToUpper(<CONSUMER SECRET>, ""));
byte[] dataBuffer = System.Text.Encoding.ASCII.GetBytes(concat);
byte[] hashBytes = hmacsha1.ComputeHash(dataBuffer);
string hash = Convert.ToBase64String(hashBytes);
OAuthHeader += "oauth_signature=\"" + EncodeToUpper(hash) + "\"";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.twitter.com/oauth/request_token");
request.Method = "POST";
request.Headers["Authorization"] = OAuthHeader;
StringBuilder responding = new StringBuilder();
HttpWebResponse resp = null;
try
{
resp = (HttpWebResponse)request.GetResponse();
}
catch (WebException exc)
{
lblError.Text = "Error Connecting to Social Network " + exc.Message;
}
if (resp != null)
{
using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
{
responding.Append(reader.ReadToEnd());
}
}
Примером одноразового номера является "ne8ehvVr0pW2EUxNHdxdyqbi8Fwphatt3SW1yerTyXH", а метка CurrentUNIXTimestamp генерируется
public static class CurrentUNIXTimestamp
{
public static string Get()
{
return Convert.ToString((int)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds);
}
}
* 1010, так как я попыталсямногие вещи, о которых я могу думать, больше не являются проблемой клиента / браузера (что было многими другими ответами), серверное время соответствует британскому летнему времени (я не знаю, будет ли это проблемой, но я попытался добавитьчас до отметки времени Unix по-прежнему 401.), и я определил URL-адрес обратного вызова на странице приложения Twitter
Я получил тТо же самое приложение, работающее с Facebook (я знаю, что он другой, но может помочь)
Фактическая ошибка происходит в resp = (HttpWebResponse) request.GetResponse () ;, который выдает ошибку 401.Я не мог получить более подробную информацию от объекта exc.response, кто-нибудь может сказать, как получить что-то полезное из ошибки в VS2008?
Спасибо за любые ответы