C# 4.0 полное руководство - 2011
Шрифт:
содержимого
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, но вместо него можно подставить адрес любого другого веб-сайта. В этой программе гипертекстовое
// Пример доступа к веб-сайту.
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" />
<meta name="description" content="The McGraw-Hill Companies Corporate Website." /> <meta http-equiv