Twitter: проверка имени пользователя и пароля в C #
Вопрос
Вопрос о вознаграждении
Я использую c # 3.5 Window Forms Application. Я использую код, указанный в принятом ответе. и я получаю ошибку ниже
Удаленный сервер возвратил ошибку: (401) не авторизован.
Пример кода для проверки имени пользователя и пароля будет очень полезен
Завершается вопрос о вознаграждении
<Ч>У меня есть приложение со следующим вариантом использования: когда пользователь впервые начинает использовать приложение, он вводит свое имя пользователя и пароль. Затем на более позднем этапе приложение может обновить свой статус.
В настоящее время я использую Twitterizer, но я считаю, что вопрос выходит за рамки конкретной библиотеки, которую я использую. Ниже приведены две соответствующие строки кода:
Twitter twitter = new Twitter("username", "password", "source");
twitter.Status.Update("update");
Конструкция объекта Twitter не выдает исключение, если имя пользователя / пароль неверны. Это, вероятно, потому что ничего не отправлено в этой точке С другой стороны, обновление статуса вызывает исключение, если имя пользователя / пароль неверны.
Моя проблема в том, что я хочу подтвердить имя пользователя / пароль в точке ввода пользователя, а не при попытке опубликовать обновление.
Как я могу подтвердить имя пользователя / пароль, не публикуя что-либо (в Twitterizer или иным способом)? Р>
Решение
Бегло взглянув на API verify_credentials, как упомянуто peSHIr, я написал небольшую процедуру, которая, похоже, помогает. Уже поздно, но я смог проверить это пару раз и, похоже, работает.
В моей функции я просто возвращаю true, если я получаю HttpResponseCode.OK, и false, если я получаю что-то еще или выдается исключение. Если твиттеру не нравятся uid / пароль, будет выдано исключение с ошибкой 401 (не авторизовано).
public bool CheckTwitterCredentials(string UserName, string Password)
{
// Assume failure
bool Result = false;
// A try except block to handle any exceptions
try {
// Encode the user name with password
string UserPass = Convert.ToBase64String(
System.Text.Encoding.UTF8.GetBytes(UserName + ":" + Password));
// Create our HTTP web request object
HttpWebRequest Request =
(HttpWebRequest)WebRequest.Create("http://twitter.com/account/verify_credentials.xml");
// Set up our request flags and submit type
Request.Method = "GET";
Request.ContentType = "application/x-www-form-urlencoded";
// Add the authorization header with the encoded user name and password
Request.Headers.Add("Authorization", "Basic " + UserPass);
// Use an HttpWebResponse object to handle the response from Twitter
HttpWebResponse WebResponse = (HttpWebResponse)Request.GetResponse();
// Success if we get an OK response
Result = WebResponse.StatusCode == HttpStatusCode.OK;
} catch (Exception Ex) {
System.Diagnostics.Debug.WriteLine("Error: " + Ex.Message);
}
// Return success/failure
return Result;
}
Другие советы
Можно попробовать использовать вызов API account / verify_credentials а>. Надеемся, что используемая вами библиотека API уже поддерживает это. Твиттер печально известен тем, что действительно ненавидит сторонних программистов, поэтому, если у вас нет веских причин что-то делать с Twitter, просто держитесь подальше ...
Я использовал другие библиотеки Twitter, но ни одна из них не поддерживает проверку правильности имени пользователя и пароля. Это может быть связано с тем, что в Twitter API нет средства для проверки имени пользователя и пароля, если только мы не попытаемся сделать что-то, требующее аутентификации.
Вы можете попытаться получить список друзей или любые другие методы, требующие аутентификации.
Twitter API не поддерживает имя пользователя и пароль уже много лет. Вместо этого у вас есть OAuth, который позволяет пользователю разрешить вашему приложению действовать от его имени. В Twitter есть account / verify_credentials конечная точка, которую можно использовать для проверки пользователь, у которого есть токены, все еще авторизует ваше приложение. Вот пример того, как вы можете вызвать эту конечную точку с помощью LINQ to Twitter:
var accounts =
from acct in twitterCtx.Account
where acct.Type == AccountType.VerifyCredentials
select acct;
Вы можете посетить Account / VerifyCredentials документацию для получения более подробной информации.
как сообщил @ joe-mayo, вы должны переключиться на OAuth. Твиттер истек v1 их API, и они задокументировали это в следующем URL https://dev.twitter.com/ документы / чаво # 17750 .
Вот функция, которую я написал, которая будет проверять имя пользователя и пароль Twitter в C #:
public bool isTwitterValid(string username, string password)
{
try
{
string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/statuses/verify.xml");
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
request.Headers.Add("Authorization", "Basic " + user);
request.ContentType = "application/x-www-form-urlencoded";
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
reader.Close();
}
catch (Exception ex)
{
if (ex.Message.Contains("404")) { return true; }
}
return false;
}