Twitter:在C#中验证用户名和密码

时间:2009-07-31 07:22:46

标签: c# api c#-4.0 twitter c#-3.0

赏金问题

我正在使用c#3.5 Window Forms Application。我正在使用接受的答案中提到的代码。我收到了以下错误

远程服务器返回错误:(401)未经授权。

非常感谢用户名和密码验证的示例代码

Bounty问题结束


我有一个具有以下用例的应用程序:当用户第一次开始使用该应用程序时,他输入了他的用户名和密码。然后,在稍后阶段,应用程序可以更新其状态。

目前我正在使用Twitterizer,但我认为这个问题超出了我正在使用的特定库的范围。以下是两行相关的代码:

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

如果用户名/密码不正确,Twitter对象的构造不会引发异常。这可能是因为此时没有发送任何内容。另一方面,如果用户名/密码无效,则状态更新会抛出异常。

我的问题是我想在用户输入时验证用户名/密码,而不是在尝试发布更新时。

如何验证用户名/密码而不发布任何内容(在Twitterizer或其他方面)?

6 个答案:

答案 0 :(得分:6)

快速查看peSHIr提到的verify_credentials API,我写了一个小程序,似乎可以解决这个问题。现在已经很晚了,但我能够测试几次并且似乎有效。

在我的函数中,如果我得到一个HttpResponseCode.OK,我只返回true,如果我得到任何其他内容或抛出异常,则返回false。如果twitter不喜欢uid / password,则会抛出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 :(得分:1)

您可以尝试使用API​​调用account/verify_credentials。希望你使用的API库已经支持了这个。推特因为真的很讨厌第三方程序员而臭名昭着,所以除非你有充分的理由对Twitter做点什么,否则就远离......

答案 2 :(得分:0)

我使用过其他Twitter库,但没有一个支持检查用户名和密码的验证。这可能是因为除非我们尝试执行需要身份验证的操作,否则Twitter API无法验证用户名和密码。

您可以做的一件事是尝试获取朋友列表或任何其他需要身份验证的方法。

答案 3 :(得分:0)

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文档了解更多详情:

答案 4 :(得分:0)

正如@ joe-mayo所知,你必须切换到OAuth。 twitter过期了他们的API的v1,他们记录了以下网址https://dev.twitter.com/docs/faq#17750

答案 5 :(得分:0)

这是我写的一个函数,它将在C#中验证Twitter用户名和密码:

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;
}