Страница 489 из 502
public virtual bool PreAuthenticate { get; set; } - Если принимает логическое значение true, то в отправляемый запрос включается информация для аутентификации. А если принимает логическое значение false, то информация для аутентификации предоставляется только по требованию адресата URI
public virtual IWebProxy Proxy { get; set; } - Получает или устанавливает прокси-сервер. Применимо только в тех средах, где используется прокси-сервер
public virtual Uri RequestUri { get; } - Получает идентификатор URI конкретного запроса
public virtual int Timeout { get; set; } - Получает или устанавливает количество миллисекунд, в течение которых будет ожидаться ответ на запрос. Для установки бесконечного ожидания используется значение Timeout. Infinite
public virtual bool UseDefaultCredential { get; set; } - Получает или устанавливает значение, которое определяет, используется ли для аутентификации устанавливаемый по умолчанию мандат. Если имеет логическое значение true, то используется устанавливаемый по умолчанию мандат, т.е. учетные данные пользователя, в противном случае этот мандат не используется
В классе WebResponse инкапсулируется ответ, получаемый по запросу. Этот класс является абстрактным. В наследующих от него классах создаются отдельные его версии, поддерживающие конкретный протокол. Объект класса WebResponse обычно получается в результате вызова метода GetResponse(), определенного в классе WebRequest. Этот объект будет экземпляром отдельного класса, производного от класса WebResponse и реализующего конкретный протокол. Методы, определенные в классе WebResponse, сведены в табл. 26.3, а свойства, объявляемые в этом классе, — в табл. 26.4. Значения этих свойств устанавливаются на основании каждого запроса в отдельности. Открытые конструкторы в классе WebResponse не определяются.
Таблица 26.3. Наиболее часто используемые методы, определенные в классе WebResponse
Метод - Описание
public virtual void Close()
Закрывает ответный поток. Закрывает также поток ввода ответа, возвращаемый методом
GetResponseStream()
public virtual Stream GetResponseStream()
Возвращает поток ввода, связанный с запрашиваемым URI. Из этого потока могут быть введены данные из запрашиваемого URI
Таблица 26.3. Свойства, определенные в классе WebResponse
Свойство - Описание
public virtual long ContentLength { get; set; } - Получает или устанавливает длину принимаемого содержимого. Устанавливается равным -1, если данные о длине содержимого недоступны
public virtual string ContentType { get; set; } - Получает или устанавливает описание принимаемого содержимого
public virtual WebHeaderCollection Headers { get; } - Получает или устанавливает коллекцию заголовков, связанных с URI
public virtual bool IsFromCache { get; } - Принимает логическое значение true, если запрос получен из кэша. А если запрос доставлен по сети, то принимает логическое значение false
public virtual bool IsMutuallyAuthenticated { get; } - Принимает логическое значение true, если клиент и сервер опознают друг друга, а иначе — принимает логическое значение false
public virtual Uri - Получает URI, по которому был сформирован ответ.
ResponseUri { get; } - Этот идентификатор может отличаться от запрашиваемого, если ответ был переадресован по другому URI
Оба класса, HttpWebRequest и HttpWebResponse, наследуют от классов WebRequest и WebResponse и реализуют протокол HTTP. В ходе этого процесса в обоих классах вводится ряд дополнительных свойств, предоставляющих подробные сведения о транзакции по протоколу HTTP. О некоторых из этих свойств речь пойдет далее в настоящей главе. Но для выполнения простых операций в Интернете эти дополнительные свойства, как правило, не требуются.
Доступ к Интернету организуется на основе классов WebRequest и WebResponse. Поэтому, прежде чем рассматривать этот процесс более подробно, было бы полезно обратиться к прострму примеру, демонстрирующему порядок доступа к Интернету по принципу запроса и ответа. Глядя на то, как эти классы применяются на практике, легче понять, почему они организованы именно так, а не как-то иначе.
В приведенном ниже примере программы демонстрируется простая, но весьма типичная для Интернета операция получения гипертекстового содержимого из конкретного веб-сайта. В данном случае содержимое получается из веб-сайта издательства McGraw-Hill по адресу www.McGraw-Hill.com, но вместо него можно подставить адрес любого другого веб-сайта. В этой программе гипертекстовое содержимое выводится на экран монитора отдельными порциями по 400 символов, чтобы полученную информацию можно было просматривать, не прибегая к прокрутке экрана.
<b>// Пример доступа к веб-сайту.</b>
<b>using System;</b>
<b>using System.Net;</b>
<b>using System.IO;</b>
<b>class NetDemo {</b>
<b> static void Main() {</b>
<b> int ch;</b>
<b> // Сначала создать объект запроса типа WebRequest по указанному URI.</b>
<b> HttpWebRequest req = (HttpWebRequest)</b>
<b> WebRequest.Create(<a href="http://www.mcgraw-hill.com/">http://www.McGraw-Hill.com</a>);</b>
<b> // Затем отправить сформированный запрос и получить на него ответ.</b>
<b> HttpWebResponse resp = (HttpWebResponse) req.GetResponse();</b>
<b> // Получить из ответа поток ввода.</b>
<b> Stream istrm = resp.GetResponseStream();</b>
<b> /* А теперь прочитать и отобразить гипертекстовое содержимое, полученное по указанному URI. Это содержимое выводится на экран отдельными порциями по 400 символов. После каждой такой порции следует нажать клавишу <ENTER>,чтобы вывести на экран следующую порцию из 400 символов. */</b>
<b> for (int i = 1; ; i++) {</b>
<b> ch = istrm.ReadByte();</b>