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

5

悬赏问题

我正在使用c# 3.5窗体应用程序。我正在使用接受的答案中提到的代码,但是我收到以下错误:

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

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

悬赏问题结束


我有一个应用程序,其使用情况如下:当用户首次开始使用应用程序时,他输入用户名和密码。然后,在很长时间后,应用程序可能会更新他的状态。

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

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

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

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

如何在不发布任何内容的情况下验证用户名/密码(使用Twitterizer或其他方式)?


也许现在没有使用Twitterizer,而是另一个API来处理Twitter。 - Kiquenet
6个回答

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

现在这不起作用了。可能是Twitter API被更新了。而你提供的代码已经失效了。 - Pankaj
1
@abcdefghi API v1已经过时。您应该使用OAuth。如果您别无选择,只能使用xAuth(使用用户名和密码),则需要请求批准。有关更多信息,请参见https://dev.twitter.com/docs/oauth/xauth。 - Jaroslav Jandek
@abcdefghi 现在是2014年,关于它的最佳实践是什么?OAuth示例,基本的已经不再适用了。 - Kiquenet
未找到 https://twitter.com/account/verify_credentials.xml。这是 Twitter 的旧版本 API。 - Kiquenet

1

你可以尝试使用 API 调用 account/verify_credentials。希望你使用的 API 库已经支持了这个功能。现在 Twitter 对第三方程序员非常不友好,所以除非你有充分的理由需要使用 Twitter,否则最好远离它。


代码在被接受的答案中无法运行。可能是 Twitter API 已经更新了。而被接受的答案提供的代码已经不再有效。 - Pankaj

0

0
我使用过其他的Twitter库,但没有一个支持检查用户名和密码的有效性。这可能是因为Twitter API没有验证用户名和密码的功能,除非我们尝试执行需要身份验证的操作。
你可以尝试获取好友列表或任何其他需要身份验证的方法。

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;

您可以访问账户/验证凭据文档以获取更多详细信息:


@Kiquenet 这是对 TwitterContext 的引用,例如:var twitterCtx = new TwitterContext(auth); - 其中 auth 是实现 IAuthorizer 接口的实例。 - Joe Mayo
TwitterContext和/或IAuthorizer是来自Twitterize的对象吗?还是你自定义的类? - Kiquenet

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

现在是2014年,Twitter API有最新的更改吗? - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接