Книга: C# для профессионалов. Том II

Классы WebRequest

Класс WebClient очень просто использовать, но он имеет ограниченные возможности. В частности, нельзя использовать его для предоставления полномочий аутентификации, так как существует не много сайтов, которые будут принимать выгружаемые файлы без аутентификации. Можно добавлять в запросы заголовочную информацию и проверять всю возвращаемую заголовочную информацию, но только в очень общем смысле, потому что нет специальной поддержки для какого-либо протокола. Причина этого состоит в том, что WebClient является классом общего назначения, созданным для работы с любым протоколом, для которого можно послать запрос и получить ответ (HTTP, FTP и т. д.). Он не может обрабатывать дополнительные свойства, специфические для какого-то одного протокола, такие как cookies, специфические для HTTP. Если желательно воспользоваться этими свойствами, необходимо выбрать семейство классов на основе двух других классов в пространстве имен System.Net: WebRequest и WebResponse.

Начнем с рассмотрения того, как загрузить страницу Web с помощью этих классов — тот же пример, что и раньше, но использующий WebRequest и WebResponse. В процессе изложения мы немного коснемся иерархии вовлеченных классов, а затем покажем, как воспользоваться дополнительными свойствами HTTP, поддерживаемыми этой иерархией.

Следующий код доказывает модификации, которые необходимо сделать в примере BasicWebClient, чтобы он использовал классы WebRequest и WebResponse.

public Form1() {
 InitializeComponent();
 WebRequest wrq = WebRequest.Create("http://www.wrox.com");
 WebResponse wrs = wrq.GetResponse();
 Stream strm = wrs.GetResponseStream();
 StreamReader sr = new StreamReader(strm);
 string line;
 while ((line = sr.ReadLine()) != null) {
  listBox1.Items.Add(line);
 }
 strm.Close();
}

Этот код начинается с создания экземпляра объекта, представляющий запрос Web. Необычно то, что это делается не с помощью использования конструктора, а с помощью вызова статического метода WebRequest.Create(); в следующем разделе будет показано, почему так это сделано. Класс WebRequest представляет запрос информации, который посылается по определенному URI, и поэтому необходимо передать URI с помощью метода Create(). WebResponse представляет данные, присылаемые назад сервером. Вызов метода WebRequest.GetResponse() в действительности посылает запрос серверу Web и создает объект Response, который можно использовать для проверки возвращаемых данных. Как и для объекта WebClient, можно получить поток, представляющий эти данные с помощью метода WebResponse.GetResponseStream().

Оглавление книги


Генерация: 1.327. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз