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

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

Жанры

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

Ватсон Карли

Шрифт:

В этой главе используется достаточно практичный подход: представлен ряд постепенно усложняющихся примеров в сопровождении соответствующей теории и с обсуждением сетевых концепций.

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

Класс WebClient 

Если необходимо выполнить запрос файла по определенному URL, то, скорее всего, самым простым классом .NET для использования в этом случае окажется

System.Net.WebClient
. Это класс максимально высокого уровня, созданный для выполнения
базовых операций с помощью одной или двух команд. 

Загрузка файлов

Существует два способа загрузки файлов с web-сайта с помощью

WebClient
, в зависимости от того, хотим ли мы файл сохранить или обработать его содержимое файла непосредственно внутри приложения. Если нужно просто сохранить файл, то вызывается метод
DownloadFile
. Этот метод получает два параметра: URL, из которого необходимо извлечь файл, и имя файла (или путь доступа), в котором мы хотим сохранить файл.

WebClient Client = new WebClient;

Client.DownloadFile("http://www.Wrox.com/default.htm", "index.htm");

Более часто приложению приходится обрабатывать данные, полученные с web-сайта. Чтобы сделать это, используется метод

OpenRead
, который возвращает ссылку типа
Stream
. Затем можно извлекать данные просто из потока.

WebClient Client = new WebClient;

Stream sfrm = Client.OpenRead("http://www.Wrox.com/default.htm");

Пример: базовый клиент Web

Первый пример продемонстрирует использование метода

webClient.OpenRead
. В этом случае содержимое загруженных данных просто выводится в окне списка. Проект создается как стандартное приложение C# для Windows, в него добавляется окно списка с именем
listBox1
, в котором выводится содержимое загруженного файла. Затем в конструкторе основной формы делаются изменения:

public Form1 {

 InitializeComponent;

 System.Net.WebClient Client = new WebClient;

 Stream strm = Client.OpenRead("http://www.wrox.com");

 StreamReader sr = new StreamReader(strm);

 string line;

 do {

line = sr.ReadLine;

listBox1.Items.Add(line);

 }

 while (line != null) strm.Close;

}

Для упрощения URI в программе жестко закодирован.

Акроним URI (Uniform Resource Identifier) — Универсальный идентификатор ресурса — означает любую короткую строку, указывающую на некоторый ресурс. Следовательно, строка видаявляется URI. В прошлом для идентификации таких адресов традиционно использовался термин URL (универсальный локатор ресурса), но термин URL больше не используется в новых технических спецификациях, теперь предпочтение отдается URI. URI имеет приблизительно такое же значение, как и URL, но более распространен, так как URI не обязательно предполагает, что используется один из известных протоколов, таких как HTTP или FTP.

Отметим,

что в этом примере использованы два потока —
StreamReader
и соединенный с ним сетевой поток. Это обычно позволяет получать данные из потока как текст и использовать методы более высокого уровня, такие как
ReadLine
, которые доступны в классе
StreamReader
. Это прекрасный пример сделанного в главе 14 замечания о достоинствах перехода от концепции перемещения данных к концепции потока. Выполнение примера создает следующий результат:

Выгрузка файлов

Класс

WebClient
обладает также методами
UploadFile
и
UploadData
. Различие между ними состоит в том, что
UploadFile
выгружает указанный файл, заданный именем файла, в то время как
UploadData
выгружает двоичные данные, которые поставляются как массив байтов:

WebClient client = new WebClient;

client.UploadData("http://www.ourwebsite.com/NewFile.htm", "C:\WebSiteFiles\NewFile.htm");

byte [] image;

// код для инициализации изображения, поэтому он содержит все

// двоичные данные для некоторого файла jpg

client.UploadData("http://www.ourwebsite.com/NewFile.jpg", image);

Классы WebRequest

Класс

WebClient
очень просто использовать, но он имеет ограниченные возможности. В частности, нельзя использовать его для предоставления полномочий аутентификации, так как существует не много сайтов, которые будут принимать выгружаемые файлы без аутентификации. Можно добавлять в запросы заголовочную информацию и проверять всю возвращаемую заголовочную информацию, но только в очень общем смысле, потому что нет специальной поддержки для какого-либо протокола. Причина этого состоит в том, что
WebClient
является классом общего назначения, созданным для работы с любым протоколом, для которого можно послать запрос и получить ответ (HTTP, FTP и т. д.). Он не может обрабатывать дополнительные свойства, специфические для какого-то одного протокола, такие как cookies, специфические для HTTP. Если желательно воспользоваться этими свойствами, необходимо выбрать семейство классов на основе двух других классов в пространстве имен
System.Net
:
WebRequest
и
WebResponse
.

Начнем с рассмотрения того, как загрузить страницу Web с помощью этих классов — тот же пример, что и раньше, но использующий

WebRequest
и
WebResponse
. В процессе изложения мы немного коснемся иерархии вовлеченных классов, а затем покажем, как воспользоваться дополнительными свойствами HTTP, поддерживаемыми этой иерархией.

Следующий код доказывает модификации, которые необходимо сделать в примере

BasicWebClient
, чтобы он использовал классы
WebRequest
и
WebResponse
.

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

Тайны затерянных звезд. Том 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