Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 189
Текст из файла (страница 189)
Для этой цели вызывается метод неабтоепб (), возвращающий все содержимое в виде строки из потока ввода. 938 часть и. Библиотека Са Далее программа осуществляет поиск ссылки в полученном содержимом. Для этого вызывается статический метод к1пс(ь1п)с (), определяемый в программе М1п)Сгатт)ег. Этот метод вызывается со строкой содержимого и исходным положением, с которого начинается поиск в полученном содержимом. Эти значения передаются методу Г1пЖ1п)с () в виде параметров Ьгко1эгх и зсагс1ос соответственно. Обратите внимание на то, что параметр эгагг1ос относится к типу геб. Сначала в методе Р1пс)ь1п)с О создается копия строки содержимого в нижнем регистре, а затем осуществляется поиск подстроки ьгеб="ьгср, обозначающей ссылку. если эта подстрока найдена, то 1)К1 копируется в строковую переменную игх, а значение параметра зсагс1ос обновляется и становится равным концу ссылки.
Но поскольку параметр зсагс1ос относится к типу геб, то это приводит к обновлению соответствующего аргумента метода Иахп (), активизируя поиск с того места, где он был прерван. В конечном итоге возвращается значение переменной игл. Эта переменная инициализирована пустым значением, и поэтому если ссылка не найдена, то возвращается пустая ссылка, обозначающая неудачный исход поиска. Если ссылка, возвращаемая методом г1пс(Ь1пк(), не является пустой, то она отображается в методе Иахп (), и далее программа запрашивает у пользователя очередные действия.
1)ользователю предоставляются одна из трех следующих возможностей: перейтн по найденной ссылке, нажав клавишу <П>, искать следующую ссылку в имеющемся содержимом, нажав клавишу <И>, или же выйти из программы, нажав клавишу <В>. Если пользователь нажмет клавишу <П>, то программа осуществит переход по найденной ссылке и получит новое содержимое по этой ссылке. После этого поиск очередной ссылки будет начат уже в новом содержимом. Этот процесс продолжается до тех пор, пока не будут исчерпаны все возможные ссылки.
В качестве упражнения можете усовершенствовать программу М1п1Сгатч!ег, дополнив ее, например, возможностью перехода по относительным ссылкам. Сделать это не так уж и трудно. Кроме того, можете полностью автоматизировать поисковый робот, чтобы он сам переходил по найденной ссылке без вмешательства со стороны пользователя, начиная со ссылки, обнаруженной на самой первой странице полученного содержимого, и продолжая переход по ссылкам на новых страницах. Как только будет достигнут тупик, поисковый робот должен вернуться на один уровень назад, найти следующую ссылку и продолжить переход по ссылке.
Для организации именно такого алгоритма работы программы вам потребуется стек, в котором должны храниться идентификаторы 1)Е1 и текущее положение поиска в строке ПЕ1. С этой целью можно, в частности, воспользоваться коллекцией класса згас)к. В качестве более сложной, но интересной задачи попробуйте организовать вывод ссылок в виде дерева.
Применение класса яеЬс1~еп~ В заключение этой главы уместно рассмотреть класс ИеЬС11епг. Как упоминалось в самом ее начале, класс ИеЬС11епс рекомендуется использовать вместо классов иеьнес(пеэг и иеьнезропэе в том случае, если в приложении требуется лишь выгружать или загружать данные из Интернета. Преимушество класса ИеЬС11епг заключается в том, что он автоматически выполняет многие операции, освобождая от их программирования вручную.
Глава 25. Сетевые средства подключения к Интернету 939 В классе иеЬС11епС определяется единственный конструктор: риЬ11с ИеЬС11епг () Таблица 26.6. Свойства, определенные в классеиеЬС11епь Описание риЫгс вСгзпд Вавелйигеяя ( дес) вес; ) Получает или устанавливает базовый адрес требуе- мого ()и).
Если это свойство установлено, то адреса, задаваемые в методах класса иеьс11епс, должны определяться относительно этого базового адреса Получает или устанавливает прбвила, определяю- щие, когда именно используется кзш риЫгс ПедиевССасЬеРо11су Сасьеро11су ( деС; веС; ) риЫгс 1СгеиепС1а1в СгеиепСза1я ( дес; вес; ) Получает или устанавливает мандат, т.е. учетные дан- ные пользователя. По умолчанию это свойство имеет пустое значение риЫзс Впсооспд Впсосхпд ( дес; вес; ) Получает или устанавливает схему кодирования сим- волов при передаче строк риЫгс ИеЬНеацегСо11ескссп неаг(егя( дес; веск ) Получает или устанавливает коллекцию заголовков запроса риЫгс Ьоо1 1вВияу( деС; ) Имеет логическое значение сгие, если данные по- прежнему передаются по запросу, в противном слу- чае — логическое значение Га1яе риЬ1гс 1неЬРгоку Ргоху ( дес; яес; ) Получает или устанавливает прокоп-сервер риЫ1с Напеиа1иесо11есС1оп Яиегуэкггпд ( декг вег; ) Получает или устанавливает строку запроса, со- стоящую из пар "имя-значение", которые могут быть присоединены к запросу.
Строка запроса отделяется от О))( символом?. Если же таких пар несколько, то каждая из них отделяется символом Ф риЫгс Иеьиеайегсо11есксоп кевропвепааоегя( дес; ) Получает коллекцию заголовков ответа риЫ1с Ьоо1 Пвепеуаи1ССгег(епС1а1в ( дес) яес; Получает или устанавливает значение, которое определяет, используется ли для аутентификации устанавливаемый по умолчанию мандат. Если имеет логическое значение сгие, то используется мандат, устанавливаемый по умолчанию, т.е. учетные данные пользователя, в противном случае этот мандат не ис- пользуется, Кроме того, в классе иеЬС11епс определяются свойства, сведенные в табл.
25.6, а также целый ряд методов, поддерживающих как синхронную, так и асинхронную передачу данных. Но поскольку рассмотрение асинхронной передачи данных выходит за рамки этой главы, то в табл. 25.7 приведены только те методы, которые поддерживают синхронную передачу данных. Все методы класса иеьс11епс генерируют исключение иеьехсерс гоп, если во время передачи данных возникает ошибка. 940 Часть (1.
Библиотека СЗ Таблица 25.7. Методы синхронной передачи, определенные а классе иеЬС11епь Метод риЫ1с Ьуге11 Оонп1иабоата(ятг1пи иг1) риЫ1с путе( Оонп1оябоася(Ог1 иг1) риЫ1с ио1б Оонп1оабу11е (яиг1пд игз, ятг1пи главе) риЫгс ио1б Оонп1оабв11е(цг1 игу, ятНвпд Глаже) риЫгс яиг1пи Оонп1оабзсг1пс (ясг1по игз) риЬ1гс ясг1пя Оонп1оабэсг1пи(иг1 игу) риЫгс Зтгвам Орепяеаб(ясг1пд игу) риЬ11с Ясгеяяг Орепяеаи(цг1 иг1) риЬ11с Этгеяяг Орепиг1те (ятг1пи игз) риЫ1с Эсгеапг ОрепИг1се(Ог1 игг) риЫгс Яьгеам ОрвпИгзсе(ясг1пи иг1, ятг1пи способ) риЫгс Эсгеяя Орепиг1се(Ог1 игу, ясг1по способ) риЫ1с Ьуте(] Ор1оябоаса(яиг1по игг, Ьусе (] 1пГс) риЫгс Ьусе (] Ор1оабрака (Огг ип, Ьуте(] зпгс) риЫас Ьусе(] Ор1оябрятя(яи 1пс иг1, яиг1пи способ, Ьуге(] 1пГс) Определение Загружает инфорыацию по адресу 0Н, на который указывает строка ига.
Возвращает результат в виде массива байтов Загружает информацию по адресу 0Н, на котгюый указывает обьект игз. Возвращает результат в виде массива байтов Загружает информацию по адресу 0Н, на который указывает строка иг.(, Сохраняет результат в файле Главе Загружает информацию по адюсу 0Й(, на который указывает обьект игг. Сохраняет результат в файле главе Загружает информацию по адресу 0Й(, нв который указывает строка ига.
Возвращает результат в виде символьной стро- КИ тИПа ятг1пс Загружает информацию по алису 0Й(, на который указывает обьект игз. Возвращает результат в виде символьной строки типа ясг1пд Возвращает поток ввода для чтения информации по адэвсу 0Й(, на который указывает строка игз. По окончании чтения информации этот поток необходимо закрыть Возвращает поток ввода для чтения информации по адресу 0Й(, На КОтОрЫй уКаЗЫВаЕт ОБЬЕКт игз. ПО ОКОНЧаНИИ ЧтЕНИя информации этот поток необходимо закрыть Возвращает поток вывода для записи информации по алресу 0Й(, на который указывает строка игз, По окончании записи информации этот поток необходимо закрыть Возвращает поток вывода для записи информации по адресу 0Й(, на который указывает объект иг1.
По окончании записи информации этот поток необходимо закрыть Возвращает поток вывода для записи информации по адресу 0Й), на который указывает строка игг. По окончании записи информации этот поток необходимо закрыть. В строке способ указывается, как именно следует записывать информацию Возвращает поток вывода для записи информации по адресу 0Й1, на который указывает объект игз. По окончании записи информации этот поток необх(щимо закрыть В строке способ указывается, как именно следует записывать информацию Записывает информацию иэ массива улус по адресу 0Й(, на который указывает строка игл В итоге возвращается ответ Записывает информацию из массива улус по адресу 0Й(, на который указывает обьект игз. В итоге возвращается ответ Записывает информацию из массива 'пус по адюсу 0Й(, на который указывает строка ига В итога возвращается отВвт.
В СтрОКЕ способ ухэамаэатоя, КаК ИМЕННО СЛЕдуЕт записывать информацию Окончание табл. 25.7 Определение риЫ1с Ьуке[) ир1опбопгп (Ог1 иг1, згг1пд способ, ЬУСе(] гпГО) риЫ1с ЬУСе[] Ор1опбГ11е(зог1пд иг1, зггьпд Глазе) риЫ1с Ьуте[) ОР1оабу11е(цгь иг1, зкгспд Глазе) риЬ11с Ьуге (] Ор1оабу51иез (Огг иг1, Назвиа1иеСО11ескспп иа15) В приведенном ниже примере программы демонстрируется применение класса НеЬС11ЕПС для загрузки данных в файл по укаэаииоМУ сетевому адресу.
// Испольэовать класс ИеЬС11епС для загрузки данных з // файл по указанному сетевому адресу. риЫ1с ЬУСе[] Ортовбр115(экгспд иг1, зкгспд способ, 5СгэпЯ Гпвзе) риЫ1с Ьуге[] ир1озс(Г11е(иг1 иг1, згг1пд списиб, зкг1пд Глазе) риЫ1с зог1пд Ор1оабБСггпд(зггспд иг1, всггод зсг) риЫ1с 5Сгьпд ир1оаОБСгспд Гбг1 иг1, 5СГ1ПЯ 5СГ) р11Ь11с 5СггпЯ ОР1оабзкгспд(зтгспд иг1, 5Сг1пЯ способ эгг1пЯ 5гг) риЫ1с 5511пд ОР1опбБСггпя(пг1 иг1, зкг1пд способ, 5Сг1пд згг) риЫ1с Ьуке[] ир1оабуа1иев(зкгапд иг1, Назеи51иеСо11есС1оп иа15) риЫ1с ЬУСе[] ир1оабиа1иез (5Сгспд иг1, 5Сг1пя спОсОб Напеиа1иеСо11есгьоп иа15) риЫ1с Ьуке[) ир1оас(Ч51иез(иг1 иг1, 5С11пд способ, Нзпеи51иеСо11ескьоп О515) Глава 25. Сетевые средства подключения к Интернету 941 Записывает информацию из массива 1п ГО по адресу 0В1, на который указывает объект иг1. В итоге возвращается стает.