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