Г. Шилдт - С#4.0 Полное руководство (1160795), страница 210
Текст из файла (страница 210)
Кахслая пара "имя-значение" хранится в коллекции класса хеЬнеас)егсо11есгдоп. Эта коллекция специально предназначена для хранения пар "имя-значение" и приме- няется аналогично любой другой коллекции (подробнее об этом см. в главе 25). Строковый массив имен может быть получен из свойства В11Кеуя, а отдельные значения— по соответствующему имени при вызове метода Ое 1 /а1п ее ( ) . Этот метод возвращает массив строк, содержащий значения, связанные с заголовком, передаваемым в качестве аргумента.
Метод Оеп(/а1пея () перегружается, чтобы принять числовой индекс или имя заголовка. В приведенной ниже программе отображаются заголовки, связанные с сетевым ресурсом, доступным по адресу ыиы. Мсбгаи-Н111. соль // Проверить заголовки, пя1пч Яуятеп1; чя1пч Яуясеш.нес; с1аяя Неас)егпеио япаг1с чогд Магп() ( // Сознать объект запроса типа ИеЬВеЧпеяс по указанному ОВ1. НГГрнеппеячеяп геЧ = (НГГрнеЬВеячеяп) ИепяеЧпеяг.сгеасе("ЬГср://ммм.нсоган-НШ .сои"); // Отправить сформированный запрос и получить на него ответ.
НГГрнеЬВеяропяе геяр = (НГГрнеЬВеяропяе) гея.оеГВеяропяе()) // Получить список имен. ясг1пч() лакея = гевр.Неабегя.л11кеуя; О Отобразить пары "имя-значение" из за~оленка. Сопво1е.нггпе11пе("(0,-20)(1)1пГЬ "ИмяГЬ "Значение" ); Тогеасп(вггепч и гп лакея) Сопво1е.нг11е("(0,-20)", и); Тогеасп(ясг1пч ч гп геяр.Неабегвпэесча1пея(п)) Сопяо1е.нг11еп1пе(ч); ) Закрыть ответный поток. геяр.С1ояе()," ) Ниже приведен полученный результат.
Не следует забывать, что информация в заголовке периодически меняется, поэтому у вас результат может оказаться несколько иным. Аоступ к соо(ое-наборам Для доступа к сооЫе-наборам, получаемым в ответ по протоколу НТТР, служит свойство Соок гез, определенное в классе НссриеЬВезроп ее.
В соо(г(е-наборах содержится информация, сохраняемая браузером. Они состоят из пар "имя-значение" Имя Тгапягег-епсог)1пд Сопсеп1-Туре оаге Яегчег Глава 26. Сетевые средства подключения к Интернету 5.027 Значение спппхеб секс/Ьси1 Яоп, 06 Оес 2009 20:32:06 ОМТ Яоп-ОНЕ-ИеЬ-Яегчег/6.1 1028 Часть ((. Библиотека С(г и упрощают некоторые виды доступа к веб-сайтам. Ниже показано, каким образом определяется свойство Соох1ез. риЫзс СооксеСо11есгтоп Сооиаея ( Пег) яеС) В классе соокзесо11ессгоп реализуются интерфейсы 1со11ессзоп и 1ЕппюегаЫе, и поэтому его можно использовать аналогично классу любой другой коллекции (подробнее об этом см. в главе 25).
У этого класса имеется также индексатор, позволяющий получать сооЫе-набор по указанному индексу или имени. В коллекции типа соо)п1есо11есс1оп хранятся объекты класса Соох1е. В классе Соохзе определяется несколько свойств, предоставляющих доступ к различным фрагментам ийформации, связанной с сооЫе-набором. Ниже приведены два свойства, наюе и Ча1де, используемые в примерах программ из этой главы.
роы1с ясг1по наюе ( чесп яес; роЬ11с ягг1пд Уа1ое ( Пег) зег; ) Имя сооЫе-набора содержится в свойстве нате, а его значение — в свойстве (/а1пе. Для того чтобы получить список сооЫе-наборов из принятого ответа, необходимо предоставить сооЫе-контейнер с запросом. И для этой цели в классе НССрнеЬНес(пезг определяется свойство СоокаеСопсаапег, приведенное ниже. роЫзс СоойвеСопгазпег СооьсеСопгазпег ( ЧеС; яег; ) В классе Соо)п1еСопгазпег предоставляются различные поля, свойства и методы, позволяющие хранить сооЫе-наборы. По умолчанию свойство Соо)п1еСопса1пег содержит пустое значение. Для того чтобы воспользоваться сооЫе-наборами, необходимо установить это свойство равным экземпляру класса Соох1еСопга1пег.
Во многих приложениях свойство Соок1еСопга1пег не применяется непосредственно, ь а вместо него из принятого ответа составляется и затем используется коллекция типа СоохсеСо11ессгоп, Свойство Соох1еСопса1пег просто обеспечивает внутренний механизм сохранения сооЫе-наборов. В приведенном ниже примере программы отображаются имена и значения сооЫенаборов, получаемых из источника по 1)Е1, указываемому в командной строке.
Следует, однако, иметь в виду, что сооЫе-наборы используются не на всех веб-сайтах, поэтому нужно еще найти такой веб-сайт, который поддерживает сооЫе-наборы. /* Пример проверки соохзе-наборов. Для того чтобы проверить, какие именно сооЫе-наборы используются на веб-сайте, укажите его имя в командной строке. так, если назвать зту программу соокзеоеюо, то по команде Соо)паеоево ЬССр://взп.сов отобразятся соокзе-наборы с веб-сайта по адресу ннн.юяп.сом. */ оя1по Зуягею; озспо Зуягею.иег; с1азз Соох1еоеюо ( ягагсс поев Ма1п(яггтпэ() агоя) ( 11(агоя.сепЧСП (= 1) ( Глава 26. Сетевые средства подключения к Интернету 1029 Сопяо1е.нггдеЬ1пе("Применение: Соонвеоеио <цг1>")т гегцгп) О Создать объект запроса типа ИеЬВейпеят по указанному ОВ1.
НССрнеЬВейцеяс гец = (НГГриеЬВепцеяс) хеьпечцеяг.сгеасе(агдя(0])т Получить пустой контейнер. гей.соох1есопда1пег = пен СооксеСопдагоег() // Отправить сформированный запрос и получить на него ответ. НдгриеЬВеяропяе геяр = (НГГрИеЬВеяропяе) гей.петкеяропяе()) О Отобразить соохье-наборы. Сопяо1е.нг11евьпе("Количество соохье-наборов: геяр.соойгея.соцпс)," Сопяо1е.нг1педгпс("(0,-20)(1)", "Имя", "Значение" ); гогыпт г=о) 1 < геяр.Соохгея.Соцпг; 1++) Сопяо1е.игьсе1.1пе("(О, -20)(1)", геяр.соох1ея(1].наые, геяр.Соонаея(1).уа1це)) // Закрыть ответный поток.
геяр.С1ояе(); Применение свойства 1.азйМо(1121е(1 Иногда требуется знать, когда именно сетевой ресурс был обновлен в последний раз. Это нетрудно сделать, пользуясь сетевыми средствами класса нс сриеьреяропяе, среди которых определено свойство ЬаяСМобдбеб, приведенное ниже. рцЬТЬс Оасетгте Ьаядмобьссеб ( Чес) ) С помощью свойства Ьазсног(1((е<( получается время обновления содержимого сетевого ресурса в последний раз. В приведенном ниже примере программы отображаются дата и время, когда был в последний раз обновлен ресурс, указываемый по 1]Р<] в командной строке.
/* Использовать свойство Ьаясмобгегеб. ](ля того чтобы проверить дату последнего обновления веб-сайта, введите его ПВТ в командной строке. Так, если назвать зту програьяяу Ьазсмобтттебоеыо, то для проверки даты последней модификации веб-сайта по адресу ннн.негЬБсЬ11бд.соы введите команду Ьаяыам)1Е1ядвавю Ькар: //ВегЪБсь11НС. сов */ цягпо Буясеяо цяьпо Буясеи.нес) с1аяя Ьаятноб111еббеыо ( 1030 Часть 11.
Библиотека С№ ягасзс упса Ма1п (ясггпст[] агпя) ( ЕЕ(агс]я.ьепстСЬ != 1) ( Сопяо1е.иг1беьвпе("Применение: ПяяГМобяагебоето <цг1>") гегцгп) ) нгьриеьнесгяеяг геч = (нгбриеЬнечцеяс) ИеЬНеццевг .Сгеаге (ягэя [0] ) ) нсгриебнеяропяе геяр = (нгьриеЬнеяропяе) тес).оегкеярппяе()) Сопяо1е.игзгеьапе("Последняя модификация: " + геяр.ЬаягнобЕЕЕеб)) геяр.С1ояе(); ) Практический пример создания программы В[1!п1Сга]([/1ег Для того чтобы показать, насколько просто программировать для Интернета средствами классов ИеЬНес[цеяс и ИеЬНеропяе, обратимся к разработке скелетного варианта поискового робота под названием М[п]Стасу!ег. Поисковый робот представляет собой программу последовательного перехода от одной ссылки на сетевой ресурс к другой.
Поисковые роботы применяются в поисковых механизмах для каталогизации содержимого. Разумеется, поисковый робот М(о[Стасу]ег не обладает такими развитыми возможностями, как те, что применяются в поисковых механизмах. Эта программа начинается с ввода пользователем конкретного адреса [1И, по которому затем читается содержимое и осуществляется поиск в нем ссылки. Если ссылка найдена, то программа запрашивает пользователя, желает ли он перейти по этой ссылке к обнаруженному сетевому ресурсу, найти другую ссылку на имеющейся странице или выйти из программы. Несмотря на всю простоту такого алгоритма поиска сетевых ресурсов, он служит интересным и наглядным примером доступа к Интернету средствами СЭ.
Программе МППСгасу1ег присущ ряд ограничений. Во-первых, в ней обнаруживаются только абсолютные ссылки, указываемые по гипертекстовой команде Ьге Е=" Ьббр. Относительные ссылки при этом не обнаруживаются. Во-вторых, возврат к предыдущей ссылке в программе не предусматривается. И в-третьих, в ней отображаются только ссылки, но не окружающее их содержимое.
Несмотря на все указанные ограничения данного скелетного варианта поискового робота, он вполне работоспособен и может быть без особых хлопот усовершенствован для Решения других задач. На самом деле добавление новых возможностей в программу МпцСгамс!ег — это удобный случай освоить на практике сетевые классы и узнать больше о сетевом подключении к Интернету. Ниже приведен полностью исходный код программы Мш[Сгамс]ег. /* МгпЕСгян1егс скелетный вариант поискового робота. Применение: для запуска поискового робота укажите ПН1 в командной строке.
Например, для того чтобы начать поиск с адреса ннн.нсоган-Н111.сои, введите следукщую команду: Млпгстям1ет Ьсср://Мссган-Н111.сож Глава 26. Сетевые средства подключения к Интернету 1031 оявпд Буясеш; пасло Буягеш.нее; оя1по Буяееш. ЬО) с1аяя МгпЬСган1ег ( О Найти ссылку з строке содержимого. ядаС1с яггспд УспбЬ1п)с(ясгспс Ьсш1зег, гет гпС ягагг1ос) ( гпс 1; 1пс ясагс, епс); яггспо игг = пз11) = ЬСш1ягг.тпбех01("Ьгес=1"ЬССр", яеагС1ос, БСгспссолраг1яоп.огб1па11опогесаяе)! 11(1 != -1) ягагС = Ьгш1ягг.тпбехбй('"', г) + 1; епб = Ьгш1ягг.1пбехсг('"', яСагС); ог1 = Ьгш1ягг.зопяег1по(яеагг, епб-ягагС); яеагС1ос = епб; ) гесогп огс; ) ясасгс чо1б маге(зсггпц[) агоя) ( ясг1пч 11пх = пп11т ягг1по ягг! ясг1пп апянег; гпс спг1ос; // содержит текущее положение з ответе 11(агся.ЬепБСЬ != 1) Сопяо1е.нг1СеЬ1пе("Применение: МгпгСгаы1ег <пгс>"); гесогп т ) ягг1по пггяпг = агоя[0); // содержит текущий ПКЬ НССрнеЬКеяропяе геяр = по11) сгу ( бо ( Сопяо1е.Игггенапе("Переход по ссылке " + пг1ягг) О создать объект запроса типа ИеЬКес)пеяС по указанному ОК1.