Базовая аутентификация HTTP для Diigo с использованием C #: Как прочитать ответ? - PullRequest
0 голосов
/ 29 декабря 2011

Я (пытаюсь) разработать приложение WPF (C #), которое просто получает (или, по крайней мере, должно получить) мои сохраненные закладки в профиле Diigo.com. Единственная полезная страница, которую я нашел, это this . В нем говорится, что я должен использовать базовую HTTP-аутентификацию, чтобы самостоятельно аутентифицироваться и делать запросы. Но не понимаю, как 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 basic? Любая помощь или предложение приветствуется!

Ответы [ 3 ]

1 голос
/ 29 декабря 2011

Если вы пытаетесь поговорить со службой, вы, вероятно, захотите использовать Windows Communication Foundation (WCF) .Он разработан специально для решения проблем, связанных с взаимодействием со службами, такими как чтение / запись XML и JSON, а также согласование механизмов транспорта, таких как HTTP.

По сути, WCF избавит вас от необходимости выполнять все "сантехнические работы"работа с объектами HttpRequest и манипулирование строками.Ваши проблемы уже были решены с помощью этой структуры.Используйте, если можете.

0 голосов
/ 30 декабря 2011

Хорошо, я решил проблему после некоторых (не совсем некоторых) усилий.Приведенный ниже код получает ответ 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.

0 голосов
/ 29 декабря 2011

Получив JSON, вы можете десериализовать его, как объяснено там:

Десериализовать JSON

...