Книга: 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()
.
- Иерархия классов WebRequest и WebResponse
- 9.1. Классы и прототипы
- Классы сертификатов
- Статические классы
- 9.8. Классы в ECMAScript 5
- 9.7.4. Иерархии классов и абстрактные классы
- Классы синхронизации, внедренные в версии .NET Framework 4.0
- Классы для программирования графики
- У14.6 Отложенные классы и прототип
- Совет 38. Проектируйте классы функторов для передачи по значению
- Классы обобщенных коллекций
- Диаграммы последовательности действий и граничные классы