使用C#的Diigo HTTP Basic Auth:如何读取响应?

时间:2011-12-29 17:25:54

标签: c# http http-authentication

我(正在尝试)开发一个WPF(C#)应用程序,该应用程序只能(或至少应该获得)我在Diigo.com个人资料中保存的书签。我找到的唯一有用的页面是this。它说我必须使用HTTP Basic认证来进行自我认证并发出请求。但是不明白C#如何处理它!我在下面提出的唯一解决方案就是将整个HTML源打印到控制台窗口。

string url = "http://www.diigo.com/sign-in";

WebRequest myReq = WebRequest.Create(url);
string usernamePassword = "<username>:<password>";
CedentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential("username", "password"));
myReq.Credentials = mycache;
myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new     ASCIIEncoding().GetBytes(usernamePassword)));
 //Send and receive the response
WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();
Console.Write(content);

这里的用户名和密码是硬编码的,但当然它们来自某些txtUsername.Text的东西。之后我将如何阅读JSON响应并解析它?  为了让我的应用程序或我自己的HTTP基本认证,我需要做什么?  欢迎任何帮助或建议!

3 个答案:

答案 0 :(得分:1)

如果您尝试与某项服务对话,则可能需要使用Windows Communication Foundation (WCF)。它专门用于解决与服务通信相关的问题,例如读/写XML和JSON,以及协商HTTP等传输机制。

基本上,WCF将为您节省执行使用HttpRequest对象和操作字符串的所有“管道”工作。你的问题已经被这个框架解决了。如果可以,请使用它。

答案 1 :(得分:0)

获得JSON后,您可以按照其中的说明对其进行反序列化:

Deserialize JSON

答案 2 :(得分:0)

好的,我在一些(不是真的一些)努力之后解决了这个问题。下面的代码从服务器获取JSON响应,然后可以使用任何首选方法进行解析。

 string key = "diigo api key";
 string username = "username";
 string pass = "password";
 string url = "https://secure.diigo.com/api/v2/";     
 string requestUrl = url + "bookmarks?key=" + key + "&user=" + username + "&count=5";
 HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(requestUrl);
 string usernamePassword = username + ":" + pass;
 myReq.Timeout = 20000;
 myReq.UserAgent = "Sample VS2010";
 //Use the CredentialCache so we can attach the authentication to the request
 CredentialCache mycache = new CredentialCache();
 //this perform Basic auth
 mycache.Add(new Uri(requestUrl), "Basic", new NetworkCredential(username, pass));
 myReq.Credentials = mycache;
 myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
  //Send and receive the response
  WebResponse wr = myReq.GetResponse();
  Stream receiveStream = wr.GetResponseStream();
  StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
  string content = reader.ReadToEnd();
  Console.Write(content);

content是从服务器返回的JSON响应  此外,this链接对于开始使用api非常有用。