繁体   English   中英

使用C#的Diigo的HTTP基本身份验证:如何读取响应?

[英]HTTP Basic Auth for Diigo using C#: How to read response?

我(正在尝试)开发一个WPF(C#)应用程序,该应用程序只能在Diigo.com个人资料上获取(或至少应该获取)我保存的书签。 我发现的唯一有用的页面是 它说我必须使用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基本身份验证? 欢迎任何帮助或建议!

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

从本质上讲,WCF可以节省您处理HttpRequest对象和处理字符串的所有“繁琐”工作。 您的问题已通过此框架解决。 如果可以,请使用它。

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

反序列化JSON

好吧,我经过一些(不是真的)努力解决了这个问题。 下面的代码从服务器获取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响应。 链接对于开始使用api也很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM