我(正在尝试)开发一个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基本认证,我需要做什么?
欢迎任何帮助或建议!
答案 0 :(得分:1)
如果您尝试与某项服务对话,则可能需要使用Windows Communication Foundation (WCF)。它专门用于解决与服务通信相关的问题,例如读/写XML和JSON,以及协商HTTP等传输机制。
基本上,WCF将为您节省执行使用HttpRequest对象和操作字符串的所有“管道”工作。你的问题已经被这个框架解决了。如果可以,请使用它。
答案 1 :(得分:0)
获得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非常有用。