C# 4.0 полное руководство - 2011 - Герберт Шилдт
Шрифт:
Интервал:
Закладка:
Свойство
Описание
public
string CharacterSet { get; }
Получает название используемого набора символов
public { get;
string ContentEncoding }
Получает название схемы кодирования
public
long ContentLength { get; }
Получает длину принимаемого содержимого. Если она недоступна, свойство имеет значение -1
public
string ContentType { get; }
Получает описание содержимого
public
CookieCollection Cookies
Получает или устанавливает список cookie-
{ get;
set; }
наборов, присоединяемых к ответу
public
WebHeaderCollection
Получает коллекцию заголовков, присоединяе
Headers! get; }
мых к ответу
public
bool IsFromCache { get; }
Принимает логическое значение true, если запрос получен из кеша. А если запрос доставлен по сети, то принимает логическое значение false
public
bool
Принимает логическое значение true, если
IsMutuallyAuthenticated { get; }
клиент и сервер опознают друг друга, а иначе — принимает логическое значение false
public DateTime LastModified { get; }
Получает время последней модификации ресурса
public
string Method { get; }
Получает строку, которая задает способ ответа
public
Version ProtocolVersion
Получает объект типа Version, описываю
{ get;
}
щий версию протокола HTTP, используемую в транзакции
public
Uri ReponseUri { get; }
Получает URI, по которому был сформирован ответ. Этот идентификатор может отличаться от запрашиваемого, если ответ был переадресован по другому URI
public
string Server { get; }
Получает строку, обозначающую имя сервера
public
HttpStatusCode StatusCode
Получает объект типа HttpStatusCode, опи
{ get;
}
сывающий состояние транзакции
public
string StatusDescription
Получает строку, обозначающую состояние
{ get;
}
транзакции в удобочитаемой форме
Доступ к заголовку
Для доступа к заголовку с информацией, получаемой в ответ по протоколу HTTP, служит свойство Headers, определенное в классе HttpWebResponse.
public WebHeaderCollection Headers{ get; }
Заголовок протокола HTTP состоит из пар "имя-значение", представленных строками. Каждая пара "имя-значение" хранится в коллекции класса WebHeaderCollection. Эта коллекция специально предназначена для хранения пар "имя-значение" и применяется аналогично любой другой коллекции (подробнее об этом см. в главе 25). Строковый массив имен может быть получен из свойства AllKeys, а отдельные значения — по соответствующему имени при вызове метода Get Values (). Этот метод возвращает массив строк, содержащий значения, связанные с заголовком, передаваемым в качестве аргумента. Метод Get Values () перегружается, чтобы принять числовой индекс или имя заголовка.
В приведенной ниже программе отображаются заголовки, связанные с сетевым ресурсом, доступным по адресу www. McGraw-Hill. com.
// Проверить заголовки.
using System; using System.Net;
class HeaderDemo { static void Main() {
// Создать объект запроса типа WebRequest по указанному URI.
HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://www.McGraw-Hill.com");
// Отправить сформированный запрос и получить на него ответ.
HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
// Получить список имен.
string[] names = resp.Headers.AllKeys;
// Отобразить пары "имя-значение" из заголовка.
Console.WriteLine ("{0,-20}{1}п", "Имя", "Значение"); foreach(string n in names) {
Console.Write ("{0,-20}", n);
foreach(string v in resp.Headers.GetValues(n))
Console.WriteLine(v);
}
// Закрыть ответный поток, resp.Close();
}
}
Ниже приведен полученный результат. Не следует забывать, что информация в заголовке периодически меняется, поэтому у вас результат может оказаться несколько иным.
Имя Значение
Transfer-encoding chunked
Content-Type text/html
Date Sun, 06 Dec 2009 20:32:06 GMT
Server Sun-ONE-Web-Server/6.1
Доступ к cookie-наборам
Для доступа к cookie-наборам, получаемым в ответ по протоколу HTTP, служит свойство Cookies, определенное в классе HttpWebResponse. В cookie-Ha6opax содержится информация, сохраняемая браузером. Они состоят из пар "имя-значение"
и упрощают некоторые виды доступа к веб-сайтам. Ниже показано, каким образом определяется свойство Cookies.
public CookieCollection Cookies { get; set; }
В классе CookieCollection реализуются интерфейсы ICollection и IEnumerable, и поэтому его можно использовать аналогично классу любой другой коллекции (подробнее об этом см. в главе 25). У этого класса имеется также индексатор, позволяющий получать cookie-Ha6op по указанному индексу или имени.
В коллекции типа CookieCollection хранятся объекты класса Cookie. В классе Cookie определяется несколько свойств, предоставляющих доступ к различным фрагментам информации, связанной с cookie-набором. Ниже приведены два свойства, Name и Value, используемые в примерах программ из этой главы.
public string Name { get; set; } public string Value { get; set; }
Имя cookie-Ha6opa содержится в свойстве Name, а его значение — в свойстве Value.
Для того чтобы получить список cookie-наборов из принятого ответа, необходимо предоставить соок1е-контейнер с запросом. И для этой цели в классе HttpWebRequest определяется свойство CookieContainer, приведенное ниже.
public CookieContainer CookieContainer { get; set; }
В классе CookieContainer предоставляются различные поля, свойства и методы, позволяющие хранить сооЫе-наборы. По умолчанию свойство CookieContainer содержит пустое значение. Для того чтобы воспользоваться cookie-наборами, необходимо установить это свойство равным экземпляру класса CookieContainer. Во многих приложениях свойство CookieContainer не применяется непосредственно, а вместо него из принятого ответа составляется и затем используется коллекция типа CookieCollection. Свойство CookieContainer просто обеспечивает внутренний механизм сохранения cookie-наборов.
В приведенном ниже примере программы отображаются имена и значения cookie-наборов, получаемых из источника по URI, указываемому в командной строке. Следует, однако, иметь в виду, что cookie-наборы используются не на всех веб-сайтах, поэтому нужно еще найти такой веб-сайт, который поддерживает cookie-наборы.
/* Пример проверки cookie-наборов.
Для того чтобы проверить, какие именно cookie-наборы используются на веб-сайте, укажите его имя в командной строке.
Так, если назвать эту программу CookieDemo, то по команде
CookieDemo http://msn.com
отобразятся cookie-наборы с веб-сайта по адресу www.msn.com. */
using System; using System.Net;
class CookieDemo {
static void Main(string[] args) {
Console.WriteLine("Применение: CookieDemo <uri>"); return;
}
11 Создать объект запроса типа WebRequest по указанному URI.
HttpWebRequest req = (HttpWebRequest)
WebRequest.Create(args[0]);
// Получить пустой контейнер.
req.CookieContainer = new CookieContainer();
// Отправить сформированный запрос и получить на него ответ.
HttpWebResponse resp = (HttpWebResponse) req.GetResponse ();
// Отобразить cookie-наборы.
Console.WriteLine("Количество cookie-наборов: " + resp.Cookies.Count);
Console.WriteLine("{0,-20}{1}", "Имя", "Значение"); for(int i=0; i < resp.Cookies.Count; i++)
Console.WriteLine("{0, -20}{1}",
resp.Cookies[i].Name, resp.Cookies[i].Value);
// Закрыть ответный поток, resp.Close ();
}
}
Применение свойства LastModified
#Иногда требуется знать, когда именно сетевой ресурс был обновлен в последний раз. Это нетрудно сделать, пользуясь сетевыми средствами класса HttpWebResponse, среди которых определено свойство LastModified, приведенное ниже.