Чтение онлайн

ЖАНРЫ

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

Шилдт Герберт

Шрифт:

LastModif iedDemo http: //HerbSchildt. com

*/

using System; using System.Net;

static void Main(string[] args) {

if(args.Length != 1) {

Console.WriteLine("Применение: LastModifiedDemo <uri>"); return;

}

HttpWebRequest req = (HttpWebRequest)

WebRequest.Create(args[0]) ;

HttpWebResponse resp = (HttpWebResponse) req.GetResponse;

Console.WriteLine("Последняя

модификация: " + resp.LastModified);

resp.Close ;

}

}

Практический пример создания программы MiniCrawler

Для того чтобы показать, насколько просто программировать для Интернета средствами классов WebRequest и WebReponse, обратимся к разработке скелетного варианта поискового робота под названием MiniCrawler. Поисковый робот представляет собой программу последовательного перехода от одной ссылки на сетевой ресурс к другой. Поисковые роботы применяются в поисковых механизмах для каталогизации содержимого. Разумеется, поисковый робот MiniCrawler не обладает такими развитыми возможностями, как те, что применяются в поисковых механизмах. Эта программа начинается с ввода пользователем конкретного адреса URI, по которому затем читается содержимое и осуществляется поиск в нем ссылки. Если ссылка найдена, то программа запрашивает пользователя, желает ли он перейти по этой ссылке к обнаруженному сетевому ресурсу, найти другую ссылку на имеющейся странице или выйти из программы. Несмотря на всю простоту такого алгоритма поиска сетевых ресурсов, он служит интересным и наглядным примером доступа к Интернету средствами С#.

Программе MiniCrawler присущ ряд ограничений. Во-первых, в ней обнаруживаются только абсолютные ссылки, указываемые по гипертекстовой команде href="#"href=\"http", startloc,

StringComparison.OrdinallgnoreCase);

if(i != -1) {

start = htmlstr. IndexOf (1111, i) + 1; end = htmlstr. IndexOf (1111, start); uri = htmlstr.Substring(start, end-start); startloc = end;

}

return uri;

}

static void Main(string[] args) { string link = null; string str; string answer;

int curloc; // содержит текущее положение в ответе if(args.Length != 1) {

Console.WriteLine ("Применение: MiniCrawler <uri>"); return ;

}

string uristr = args[0]; // содержит текущий URI HttpWebResponse resp = null; try { do {

Console .WriteLine ("Переход

по ссылке 11 + uristr);

// Создать объект запроса типа WebRequest по указанному URI. HttpWebRequest req = (HttpWebRequest)

WebRequest.Create(uristr);

uristr = null; // запретить дальнейшее использование этого URI

// Отправить сформированный запрос и получить на него ответ, resp = (HttpWebResponse) req.GetResponse;

Stream istrm = resp.GetResponseStream ;

// Заключить поток ввода в оболочку класса StreamReader. StreamReader rdr = new StreamReader(istrm) ;

// Прочитать всю страницу, str = rdr.ReadToEndO ;

curloc = 0;

do {

// Найти следующий URI для перехода по ссылке, link = FindLink(str, ref curloc);

if(link != null) {

Console.WriteLine("Найдена ссылка: " + link);

Console.Write("Перейти по ссылке, Искать дальше, Выйти?"); answer = Console.ReadLine;

if(string.Equals(answer, "П",

StringComparison.OrdinallgnoreCase)) {

uristr = string.Copy(link); break;

} else if(string.Equals(answer, "B",

StringComparison.OrdinallgnoreCase)) { break;

} else if(string.Equals(answer, "И",

StringComparison.OrdinallgnoreCase)) {

Console.WriteLine("Поиск следующей ссылки.");

}

} else {

Console.WriteLine("Больше ссылок не найдено."); break;

}

} while(link.Length > 0);

// Закрыть ответный поток, if(resp != null) resp.Close;

} while(uristr != null);

} catch(WebException exc) {

Console.WriteLine("Сетевая ошибка: " + exc.Message +

"\пКод состояния: " + exc.Status);

} catch(ProtocolViolationException exc) {

Console.WriteLine("Протокольная ошибка: " + exc.Message);

} catch(UriFormatException exc) {

Console.WriteLine("Ошибка формата URI: " + exc.Message);

} catch(NotSupportedException exc) {

Console.WriteLine("Неизвестный протокол: " + exc.Message);

} catch(IOException exc) {

Console.WriteLine("Ошибка ввода-вывода: " + exc.Message);

Поделиться с друзьями: