Выбрать главу

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;

Console.Write ( (char) ch); if((i % 4 0 0)==0) {

Console.Write ("ХпНажмите клавишу <Enter>.");

Console.ReadLine();

}

}

// Закрыть ответный поток. При этом закрывается также поток ввода istrm. resp.Close(); •

}

}

Ниже приведена первая часть получаемого результата. (Разумеется, это содержимое может со временем измениться в связи с обновлением запрашиваемого веб-сайта, и поэтому у вас оно может оказаться несколько иным.)

<html>

<head>

<title>Home - The McGraw-Hill Companies</title>

<meta name="keywords" content="McGraw-Hill Companies,McGraw-Hill, McGraw Hill, Aviation Week, BusinessWeek, Standard and Poor's, Standard & Poor1s,CTB/McGraw-Hill,Glencoe/McGraw-Hill, The Grow Network/McGraw-Hill,Macmillan/McGraw-Hill, McGraw-Hill Contemporary,McGraw-Hill Digital Learning,McGraw-Hill Professional Development,SRA/McGraw

Нажмите клавишу <Enter>.

-Hill,Wright «Group/McGraw-Hill,McGraw-Hill Higher Education,McGraw-Hill/Irwin, McGraw-Hill/Primis Custom Publishing,McGraw-Hill/Ryerson,Tata/McGraw-Hill,

McGraw-Hill Interamericana,Open University Press, Healthcare Information Group, Platts, McGraw-Hill Construction, Information & Media Services" />