Если ссылка, возвращаемая методом
FindLink(), не является пустой, то она отображается в методеMain (), и далее программа запрашивает у пользователя очередные действия. Пользователю предоставляются одна из трех следующих возможностей: перейти по найденной ссылке, нажав клавишу <П>, искать следующую ссылку в имеющемся содержимом, нажав клавишу <И>, или же выйти из программы, нажав клавишу <В>. Если пользователь нажмет клавишу <П>, то программа осуществит переход по найденной ссылке и получит новое содержимое по этой ссылке. После этого поиск очередной ссылки будет начат уже в новом содержимом. Этот процесс продолжается до тех пор, пока не будут исчерпаны все возможные ссылки.В качестве упражнения вы сами можете усовершенствовать программу MiniCrawler, дополнив ее, например, возможностью перехода по относительным ссылкам. Сделать это не так уж и трудно. Кроме того, вы можете полностью автоматизировать поисковый робот, чтобы он сам переходил по найденной ссылке без вмешательства со стороны пользователя, начиная со ссылки, обнаруженной на самой первой странице полученного содержимого, и продолжая переход по ссылкам на новых страницах. Как только будет достигнут тупик, поисковый робот должен вернуться на один уровень назад, найти следующую ссылку и продолжить переход по ссылке. Для организации именно такого алгоритма работы программы вам потребуется стек, в котором должны храниться идентификаторы URI и текущее состояние поиска в строке URL С этой целью можно, в частности, воспользоваться коллекцией класса
Stack.В качестве более сложной, но интересной задачи попробуйте организовать вывод ссылок в виде дерева.Применение класса WebClient
В заключение этой главы уместно рассмотреть класс
WebClient.Как упоминалось в самом ее начале, классWebClientрекомендуется использовать вместо классовWebRequestиWebResponseв том случае, если в приложении требуется лишь выгружать или загружать данные из Интернета. Преимущество классаWebClientзаключается в том, что он автоматически выполняет многие операции, освобождая от их программирования вручную.В классе
WebClientопределяется единственный конструктор.public WebClient()