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

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

public Form1 {

 InitializeComponent;

 WebRequest wrq = WebRequest.Create("http://www.wrox.com");

 WebResponse wrs = wrq.GetResponse;

 Stream strm = wrs.GetResponseStream;

 StreamReader sr = new StreamReader(strm);

 string line;

 while ((line = sr.ReadLine) != null) {

listBox1.Items.Add(line);

 }

 strm.Close;

}

Этот код начинается с создания экземпляра объекта, представляющий запрос Web. Необычно то, что это делается не с помощью использования конструктора, а с помощью вызова

статического метода
WebRequest.Create
; в следующем разделе будет показано, почему так это сделано. Класс
WebRequest
представляет запрос информации, который посылается по определенному URI, и поэтому необходимо передать URI с помощью метода
Create
.
WebResponse
представляет данные, присылаемые назад сервером. Вызов метода
WebRequest.GetResponse
в действительности посылает запрос серверу Web и создает объект
Response
, который можно использовать для проверки возвращаемых данных. Как и для объекта
WebClient
, можно получить поток, представляющий эти данные с помощью метода
WebResponse.GetResponseStream
.

Другие свойства WebRequest и WebResponse

Здесь кратко будут упомянуты пара других областей, в которых

WebRequest
и
WebResponse
и связанные классы предоставляют хорошую поддержку.

Информация заголовка HTTP

Важной частью протокола HTTP является возможность послать значительную заголовочную информацию с помощью потоков запроса и ответа. Эта информация может включать данные GET и POST, cookies, а также данные определенного пользователя, посылающего запрос. Как и можно было ожидать, предоставляется полная поддержка заданию и доступу к этим данным. Однако эта поддержка не является частью классов

WebRequest
и
WebResponse
, она реализована двумя производными классами:
HttpWebRequest
и
HttpWebResponse
. Как скоро будет показано, при создании объекта
WebRequest
с помощью обычного механизма, если предоставленный URI был URI HTTP, то получаемая ссылка в действительности указывает на объект
HttpRequest
, и можно при желании преобразовать эту ссылку в такой объект. Реализация
HttpRequest
метода
GetResponse
возвращает объект
HttpWebResponse
через ссылку
WebResponse
, поэтому снова можно выполнить простое преобразование для доступа к свойствам, специфическим для HTTP.

Подробное описание этой области представлено в документации MSDN для классов

HttpWebRequest
и HttpWebResponse.

Асинхронные запросы страниц

Дополнительным полезным свойством

WebRequest
вместо
WebClient
является возможность асинхронного запроса страниц. Это важно, так как в Интернете возможна достаточно длительная задержка между отправкой запроса на хост и началом получения каких-либо данных. Методы, подобные
WebClient.DownloadData
и
WebRequest.GetResponse
, не возвращают управление, пока с сервера не вернется ответ. Может оказаться нежелательным, чтобы приложение было связано с ожиданием в течение этого времени. В таком случае попробуйте воспользоваться методами
BeginGetResponse
и
EndGetResponse
. Они работают асинхронно. Если вызвать
BeginGetResponse
, то запрос будет отправлен на хост, а метод немедленно вернет управление, предоставляя делегата типа
AsyncCallback
. Пока сервер отвечает на запрос, можно будет выполнять другую работу. Подробное описание этих методов можно найти в MSDN.

Отображение выходных данных в виде страницы HTML

Первый пример показывает, что базовые классы .NET существенно облегчают загрузку и обработку данных из Интернета. Однако до сих пор файлы выводились только как простой текст. В приложении желательно часто просматривать файл HTML с помощью интерфейса в стиле Internet Explorer, чтобы установить, как действительно выглядит документ Web. К сожалению, когда писалась эта книга, базовые классы .NET не включали никакой собственной поддержки для управления этими свойствами интерфейса в

стиле Internet Explorer. Чтобы сделать это, необходимо либо программным путем вызвать Internet Explorer, либо воспользоваться элементом управления ActiveX
WebBrowser
, который существовал уже до появления .NET.

Одним из случаев, где интерфейс пользователя выводится в стиле Internet Explorer, является создание приложения C#, которое генерирует или допускает редактирование страниц HTML с последующим выводом сгенерированных страниц пользователю.

Программный запуск процесса Internet Explorer, направленного на заданную страницу Web, можно выполнить с помощью класса

Process
из пространства имен
System.Diagnostics
.

Process myProcess = new Process;

myProcess.StartInfо.FileName = "iexplore.exe";

myProcess.StartInfo.Arguments = "http://www.wrox.com";

myProcess.Start;

Однако IE при этом запускается и как отдельное окно, которое на самом деле не соединено и не находится под управлением приложения. Следовательно, хотя этот код приведен здесь для справки, такая техника не подходит для частого применения.

С другой стороны использование элемента управления WebBrowser означает, что выведенный браузер может составить интегральную часть приложения, и приложение получит полный контроль над работой браузера. Этот элемент управления достаточно развит, обладает большим числом методов свойств и событий.

Простейшим способом встроить этот элемент управления с помощью Visual Studio.NET является добавление элемента управления в панель инструментов. Для этого щелкните правой кнопкой мыши на Toolbox в VisualStudio.NET и выберите Customize Toolbox из контекстного меню, что вызывает диалоговое окно, приведенное ниже. Необходимо выбрать вкладку COM Component и щелкнуть на Microsoft Web Browser.

Элемент управления WebBrowser появится теперь в панели инструментов, можно щелкнуть та нем, чтобы поместить его на форму в приложении Windows на C#, так же, как любой другой элемент управления Windows Forms в .NET. Visual Studio.NET автоматически создает весь код взаимодействия COM, необходимый программе C# для работы в качестве клиента с этим элементом управления, чтобы можно было интерпретировать его как просто элемент управления .NET. Это будет продемонстрировано с помощью другого очень короткого примера

DisplayWebPage
, в котором выводится страница Web с жестко закодированным URI.

DisplayWebPage
создается как стандартное приложение Windows C#, элемент управления ActiveX
WebBrowser
помещается в форму, как описано выше. По умолчанию Visual Studio.NET именует соответствующую переменную
axWebBrowser1
, и здесь будет оставлено имя по умолчанию. Затем в конструктор
Form1
добавляется код:

public Form1

 // Требуется для поддержки Windows Form Designer.

 InitializeComponent;

 int zero = 0;

 object oZero = zero;

 string emptyString = "";

 object oEmptyString = emptyString;

 axWebBrowser1.Navigate("http://www.wrox.com",

ref oZero, ref oEmptyString,

ref oEmptyString, ref oEmptyString);

}

В этом коде используется метод

Navigate
элемента управления
WebBrowser
, который реально посылает запрос HTTP и выводит данные заданного URI. Первый параметр этого метода является строкой, содержащей URL, куда будет совершено перемещение. Остальные параметры соответственно позволяют: задать различные флажки; указать именованную рамку, в которой должен быть выведен браузер; определить любые данные POST, посылаемые с запросом, и дополнительную информацию заголовка HTTP. Используемых по умолчанию нулевых значений и пустых строк будет в данном случае достаточно. Эти параметры задаются в элементе управления как необязательные, но C# не поддерживает необязательные параметры, поэтому нужно определить их явно. Необходимо также явно объявить объектные ссылки для этих переменных, так как они передаются только по ссылке.

Поделиться:
Популярные книги

Тайны затерянных звезд. Том 1

Лекс Эл
1. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
фэнтези
5.00
рейтинг книги
Тайны затерянных звезд. Том 1

Кровь эльфов

Сапковский Анджей
3. Ведьмак
Фантастика:
фэнтези
9.23
рейтинг книги
Кровь эльфов

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Имперский Курьер

Бо Вова
1. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Имперский Курьер

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7