Twitter: проверка имени пользователя и пароля в C # - PullRequest
5 голосов
/ 31 июля 2009

Вопрос о вознаграждении

Я использую c # 3.5 Window Forms Application. Я использую код, указанный в принятом ответе. и я получаю ниже ошибки

Удаленный сервер возвратил ошибку: (401) Не авторизован.

Пример кода для проверки имени пользователя и пароля будет очень полезен

Окончание вопроса о вознаграждении


У меня есть приложение со следующим вариантом использования: когда пользователь впервые начинает использовать приложение, он вводит свое имя пользователя и пароль. Затем на более поздней стадии приложение может обновить свой статус.

В настоящее время я использую Twitterizer, но я считаю, что вопрос выходит за рамки конкретной библиотеки, которую я использую. Ниже приведены две соответствующие строки кода:

Twitter twitter = new Twitter("username", "password", "source"); 
twitter.Status.Update("update");

Конструкция объекта Twitter не вызывает исключения, если имя пользователя / пароль неверны. Это, вероятно, потому что ничего не отправлено в этот момент. С другой стороны, обновление статуса вызывает исключение, если имя пользователя / пароль неверны.

Моя проблема в том, что я хочу подтвердить имя пользователя / пароль в точке ввода пользователя, а не при попытке опубликовать обновление.

Как я могу подтвердить имя пользователя / пароль, не публикуя что-либо (в Twitterizer или иным способом)?

Ответы [ 6 ]

6 голосов
/ 31 июля 2009

Бегло взглянув на API verify_credentials, как упомянуто peSHIr, я написал небольшую процедуру, которая, похоже, помогает. Уже поздно, но мне удалось пару раз протестировать его и, похоже, он работает.

В моей функции я просто возвращаю истину, если я получаю HttpResponseCode.OK, и ложь, если я получаю что-то еще или выдается исключение. Если твиттеру не нравится 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;
}
1 голос
/ 31 июля 2009

Вы можете попробовать использовать вызов API account / verify_credentials . Надеемся, что используемая вами библиотека API уже поддерживает это. Твиттер печально известен тем, что действительно ненавидит сторонних программистов, поэтому, если у вас нет веских причин что-то делать с Twitter, просто держитесь подальше ...

0 голосов
/ 09 октября 2013

Вот функция, которую я написал, которая будет проверять имя пользователя и пароль 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;
}
0 голосов
/ 09 октября 2013

как сообщил @ joe-mayo, вы должны переключиться на OAuth. Твиттер истек v1 их API, и они задокументировали, что в следующем URL https://dev.twitter.com/docs/faq#17750.

0 голосов
/ 04 октября 2013

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 документацию для получения более подробной информации:

0 голосов
/ 31 июля 2009

Я пользовался другими библиотеками Twitter, но ни одна из них не поддерживает проверку имени пользователя и пароля на достоверность. Это может быть связано с тем, что в Twitter API нет возможности проверить имя пользователя и пароль, если мы не попытаемся сделать что-то, требующее аутентификации.

Одна вещь, которую вы можете сделать, это попытаться получить список друзей или любые другие методы, требующие аутентификации.

...