В качестве упражнения вы сами можете усовершенствовать программу MiniCrawler, дополнив ее, например, возможностью перехода по относительным ссылкам. Сделать это не так уж и трудно. Кроме того, вы можете полностью автоматизировать поисковый робот, чтобы он сам переходил по найденной ссылке без вмешательства со стороны пользователя, начиная со ссылки, обнаруженной на самой первой странице полученного содержимого, и продолжая переход по ссылкам на новых страницах. Как только будет достигнут тупик, поисковый робот должен вернуться на один уровень назад, найти следующую ссылку и продолжить переход по ссылке. Для организации именно такого алгоритма работы программы вам потребуется стек, в котором должны храниться идентификаторы URI и текущее состояние поиска в строке URL С этой целью можно, в частности, воспользоваться коллекцией класса Stack
Применение класса WebClient
В заключение этой главы уместно рассмотреть класс WebClient
WebClient
рекомендуется использовать вместо классов WebRequest
и WebResponse
в том случае, если в приложении требуется лишь выгружать или загружать данные из Интернета. Преимущество класса WebClient
заключается в том, что он автоматически выполняет многие операции, освобождая от их программирования вручную.В классе WebClient
public WebClient()
Кроме того, в классе WebClient
WebClient
генерируют исключение WebException
, если во время передачи данных возникает ошибка.Таблица 26.6. Свойства, определенные в классе WebClient
Свойство -
Описаниеpublic string BaseAddress { get; set; } -
Получает или устанавливает базовый адрес требуемого URI. Если это свойство установлено, то адреса, задаваемые в методах класса WebClient, должны определяться относительно этого базового адресаpublic RequestCachePolicy CachePolicy { get; set; } -
Получает или устанавливает правила, определяющие, когда именно используется кэшpublic ICredentials Credentials { get; set; } -
Получает или устанавливает мандат, т.е. учетные данные пользователя. По умолчанию это свойство имеет пустое значениеpublic Encoding Encoding { get; set; } -
Получает или устанавливает схему кодирования символов при передаче строкpublic WebHeaderCollection Headers{ get; set; } -
Получает или устанавливает коллекцию заголовков запросаpublic bool IsBusy { get; } -
Принимает логическое значение true, если данные по-прежнему передаются по запросу, а иначе — логическое значение falsepublic IWebProxy Proxy { get; set; } -
Получает или устанавливает прокси-серверpublic NameValueCollection QueryString { get; set; } -
Получает или устанавливает строку запроса, состоящую из пар “имя-значение”, которые могут быть присоединены к запросу. Строка запроса отделяется от URI символом ?. Если же таких пар несколько, то каждая из них отделяется символом @public WebHeaderCollection ResponseHeaders{ get; } -
Получает коллекцию заголовков ответаpublic bool UseDefaultCredentials { get; set; } -
Получает или устанавливает значение, которое определяет, используется ли для аутентификации устанавливаемый по умолчанию мандат. Если принимает логическое значение true, то используется мандат, устанавливаемый по умолчанию, т.е. учетные данные пользователя, в противном случае этот мандат не используетсяТаблица 26.7. Методы синхронной передачи, определенные в классе WebClient
Метод -
Определениеpublic byte[] DownloadData(string
public byte[] DownloadData(Uri