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

Roe*_*ler 5 c# api twitter c#-3.0 c#-4.0

赏金问题

我正在使用c#3.5 Window Forms Application.我正在使用接受的答案中提到的代码.而我正在低于错误

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

将非常感谢用于验证UserName和Password的示例代码

赏金问题结束


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

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

Twitter twitter = new Twitter("username", "password", "source"); 
twitter.Status.Update("update");
Run Code Online (Sandbox Code Playgroud)

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

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

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

mkg*_*der 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;
}
Run Code Online (Sandbox Code Playgroud)