Добавить в цитаты Настройки чтения

Страница 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 символов. После каждой такой порции следует нажать клавишу &lt;ENTER&gt;,чтобы вывести на экран следующую порцию из 400 символов. */</b>

<b>    for (int i = 1; ; i++) {</b>

<b>      ch = istrm.ReadByte();</b>