KnigaRead.com/
KnigaRead.com » Разная литература » Прочее » Герберт Шилдт - C# 4.0 полное руководство - 2011

Герберт Шилдт - C# 4.0 полное руководство - 2011

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Герберт Шилдт, "C# 4.0 полное руководство - 2011" бесплатно, без регистрации.
Перейти на страницу:

Если ссылка, возвращаемая методом FindLink (), не является пустой, то она отображается в методе Main (), и далее программа запрашивает у пользователя очередные действия. Пользователю предоставляются одна из трех следующих возможностей: перейти по найденной ссылке, нажав клавишу <П>, искать следующую ссылку в имеющемся содержимом, нажав клавишу <И>, или же выйти из программы, нажав клавишу <В>. Если пользователь нажмет клавишу <П>, то программа осуществит переход по найденной ссылке и получит новое содержимое по этой ссылке. После этого поиск очередной ссылки будет начат уже в новом содержимом. Этот процесс продолжается до тех пор, пока не будут исчерпаны все возможные ссылки.

В качестве упражнения вы сами можете усовершенствовать программу MiniCrawler, дополнив ее, например, возможностью перехода по относительным ссылкам. Сделать это не так уж и трудно. Кроме того, вы можете полностью автоматизировать поисковый робот, чтобы он сам переходил по найденной ссылке без вмешательства со стороны пользователя, начиная со ссылки, обнаруженной на самой первой странице полученного содержимого, и продолжая переход по ссылкам на новых страницах. Как только будет достигнут тупик, поисковый робот должен вернуться на один уровень назад, найти следующую ссылку и продолжить переход по ссылке. Для организации именно такого алгоритма работы программы вам потребуется стек, в котором должны храниться идентификаторы URI и текущее состояние поиска в строке URL С этой целью можно, в частности, воспользоваться коллекцией класса Stack. В качестве более сложной, но интересной задачи попробуйте организовать вывод ссылок в виде дерева.

Применение класса WebClient

В заключение этой главы уместно рассмотреть класс WebClient. Как упоминалось в самом ее начале, класс WebClient рекомендуется использовать вместо классов WebRequest и WebResponse в том случае, если в приложении требуется лишь выгружать или загружать данные из Интернета. Преимущество класса WebClient заключается в том, что он автоматически выполняет многие операции, освобождая от их программирования вручную.

В классе WebClient определяется единственный конструктор.

public WebClient()

Кроме того, в классе WebClient определяются свойства, сведенные в табл. 26.6, а также целый ряд методов, поддерживающих как синхронную, так и асинхронную передачу данных. Но поскольку рассмотрение асинхронной передачи данных выходит за рамки этой главы, то в табл. 26.7 приведены только те методы, которые поддерживают синхронную передачу данных. Все методы класса WebClient генерируют исключение WebException, если во время передачи данных возникает ошибка.

Таблица 26.6. Свойства, определенные в классе WebClient

Свойство

Описание

public string BaseAddress { get; set; }

public RequestCachePolicy CachePolicy { get; set; } public ICredentials Credentials { get; set; }

public Encoding Encoding { get; set; }

Получает или устанавливает базовый адрес требуемого URI. Если это свойство установлено, то адреса, задаваемые в методах класса WebClient, должны определяться относительно этого базового адреса Получает или устанавливает правила, определяющие, когда именно используется кэш1 Получает или устанавливает мандат, т.е. учетные данные пользователя. По умолчанию это свойство имеет пустое значение

Получает или устанавливает схему кодирования символов при передаче строк

Свойство

Описание

public WebHeaderCollection Headers! get; set; } public bool IsBusy( get; }

public IWebProxy Proxy { get; set; }

,public NameValueCollection QueryString { get; set; }

public WebHeaderCollection ResponseHeaders{ get; } public bool

UseDefaultCredentials { get; set; }

Получает или устанавливает коллекцию заголовков запроса

Принимает логическое значение true, если данные по-прежнему передаются по запросу, а иначе — логическое значение false Получает или устанавливает прокси-сервер

Получает или устанавливает строку запроса, состоящую из пар “имя-значение”, которые могут быть присоединены к запросу. Строка запроса отделяется от URI символом ?. Если же таких пар несколько, то каждая из них отделяется символом 0 Получает коллекцию заголовков ответа

Получает или устанавливает значение, которое определяет, используется ли для аутентификации устанавливаемый по умолчанию мандат. Если принимает логическое значение true, то используется мандат, устанавливаемый по умолчанию, т.е. учетные данные пользователя, в противном случае этот мандат не используется

Таблица 26.7. Методы синхронной передачи, определенные в классе WebClient

Метод

Определение

public byte[]

Загружает информацию по адресу UR1, обозначае

DownloadData(string address)

мому параметром address. Возвращает результат в виде массива байтов

public byte[]

Загружает информацию по адресу URI, обозначае

DownloadData(Uri address)

мому параметром address. Возвращает результат в виде массива байтов

public void

Загружает информацию по адресу URI, обозначае

DownloadFile(string uri,

мому параметром fileName. Сохраняет результат

string fileName)

в файле fileName

public void DownloadFile(Uri

Загружает информацию по адресу URI, обозначае

address, string fileName)

мому параметром address. Сохраняет результат в файле fileName

public string

Загружает информацию по адресу URI, обозначае

DownloadString(string

мому параметром address. Возвращает результат

address)

в виде символьной строки типа string

public string

Загружает информацию по адресу URI, обозначае

DownloadString(Uri address)

мому параметром address. Возвращает результат в виде символьной строки типа string

public Stream

Возвращает поток ввода для чтения информации по

OpenRead(string address)

адресу URI, обозначаемому параметром address. По окончании чтения информации этот поток необходимо закрыть

Метод

Определение

public Stream OpenRead(Uri

Возвращает поток ввода для чтения информации по

address)

адресу URI, обозначаемому параметром address. По окончании чтения информации этот поток необходимо закрыть

public Stream

Возвращает поток вывода для записи информа

OpenWrite(string address)

ции по адресу URI, обозначаемому параметром address. По окончании записи информации этот поток необходимо закрыть

public Stream OpenWrite(Uri

Возвращает поток вывода для записи информа

address)

ции по адресу URI, обозначаемому параметром address. По окончании записи информации этот поток необходимо закрыть

public Stream

Возвращает поток вывода для записи информа

OpenWrite(string address,

ции по адресу URI, обозначаемому параметром

string method)

address. По окончании записи информации этот

поток необходимо закрыть. В строке, передаваемой в качестве параметра method, указывается, как именно следует записывать информацию

public Stream OpenWrite(Uri

Возвращает поток вывода для записи информа

address, string method)

ции по адресу URI, обозначаемому параметром address. По окончании записи информации этот поток необходимо закрыть. В строке, передаваемой в качестве параметра method, указывается, как именно следует записывать информацию

public byte[]

Записывает информацию из массива data по

UploadData(string address,

адресу URI, обозначаемому параметром address.

byte[] data)

В итоге возвращается ответ

public byte[] UploadData(Uri

Записывает информацию из массива data по

address, byte[] data)

адресу URI, 'обозначаемому параметром address. В итоге возвращается ответ

public byte[]

Записывает информацию из массива data по

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*