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

赏金问题

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

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

将非常感谢用于validationUserName和Password的示例代码

赏金问题结束


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

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

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

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

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

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

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

在我的函数中,如果我得到一个HttpResponseCode.OK,我只返回true,如果我得到任何其他内容或抛出exception,则返回false。 如果twitter不喜欢uid /密码,则会抛出401exception(未经授权)的exception。

 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​​调用帐户/ verify_credentials 。 希望你使用的API库已经支持这个.. Twitter现在因为真正讨厌第三方程序员而臭名昭着,所以除非你有充分的理由对Twitter做点什么,否则就远离……

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

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

Twitter API多年来一直不支持用户名/密码。 相反,您拥有OAuth,它允许用户授权您的应用程序代表他们行事。 Twitter有一个帐户/ verify_credentials端点,您可以使用该端点来validation您所拥有的令牌用户是否仍然授权您的应用。 以下是如何使用LINQ to Twitter调用此端点的示例:

  var accounts = from acct in twitterCtx.Account where acct.Type == AccountType.VerifyCredentials select acct; 

您可以访问Account / VerifyCredentials文档以获取更多详细信息:

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

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

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