Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ПИ Программирование на С# _Хотов.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.22 Mб
Скачать
      1. Классы WebRequest и WebResponse

Для отправки запроса предназначен класс WebRequest. Класс WebResponse позволяет получить ответ на запрос.

Выполним простейший запрос:

using System;

using System.Net;

using System.IO;

using System.Threading.Tasks;

namespace NetConsoleApp

{

class Program

{

static void Main(string[] args)

{

WebRequest request = WebRequest.Create("http://somesite.com/myfile.txt");

WebResponse response = request.GetResponse();

using (Stream stream = response.GetResponseStream())

{

using (StreamReader reader = new StreamReader(stream))

{

string line = "";

while ((line = reader.ReadLine()) != null)

{

Console.WriteLine(line);

}

}

}

response.Close();

Console.WriteLine("Запрос выполнен");

Console.Read();

}

}

}

Процесс отправки запроса разбивается на несколько этапов:

  1. Создание объекта WebRequest с помощью метода Create(), в который передается адрес ресурса с виде строки или объекта Uri:

  2. WebRequest request = WebRequest.Create("http://somesite.com/myfile.txt");

  3. Отправка запроса и получение ответа:

  4. WebResponse response = request.GetResponse();

  5. Получение потока ответа и манипуляции с ним:

  6. Stream stream = response.GetResponseStream();

Для получения информации, специфичной для протокола HTTP, используются два класса: HttpWebRequest иHttpWebResponse, которые наследуются соответственно от WebRequest и WebResponse.

Использование HttpWebRequest и HttpWebResponse во многом аналогично:

private static async Task RequestAsync()

{

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8080/mytxtFile.txt");

HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

using (Stream stream = response.GetResponseStream())

{

using (StreamReader reader = new StreamReader(stream))

{

Console.WriteLine(reader.ReadToEnd());

}

}

response.Close();

}

Некоторые важные свойства класса HttpWebRequest:

  • TimeOut: указывает на время в миллисекундах, допустимое для ожидания ответа от сервера (ожидание выполнения методов GetResponse() и GetRequestStream()). По умолчанию имеет значение 100 000 миллисекунд (100 секунд)

  • KeepAlive: при значении true позволяет устанавливать постоянные подключения к серверу. В итоге для нескольких запросов можно будет использовать одно и то же подключение, что сэкономит время на открытие/закрытие нового подключения. По умолчанию имеет значение true.

  • AllowAutoRedirect: указывает, должен ли запрос следовать ответам переадресации. При значении true запрос автоматически будет использовать переадресацию. Чтобы запретить переадресацию, надо установить значение false. По умолчанию имеет значение true.

Также можно использовать свойство MaximumAutomaticRedirections, которое устанавливает максимальное количество переадресаций

  • Credentials: представляет объект NetworkCredential, который устанавливает идентификацию пользователя (логин, пароль)

Некоторые важные свойства класса HttpWebResponse:

  • ContentLength: значение заголовка Content-Length, возвращаемого с ответом, и возвращает длину содержимого в байтах в запросе (длина заголовков в этот объем не включается)

  • Cookies: представляет объект CookieCollection и возвращает файлы куки, которые связаны с ответом

  • Headers: Возвращает заголовки, связанные с данным ответом

  • LastModified: возвращает дату и время последнего изменения содержимого ответа

Установка логина и пароля в запросе:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somesite.com/auth");

request.Credentials = new NetworkCredential("myLogin", "myPassword");

HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

В данном случае используется базовая HTTP-аутентификация.

Получим, к примеру, заголовки ответа:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somesite.com/mytxtFile.txt");

HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

WebHeaderCollection headers = response.Headers;

for(int i=0; i< headers.Count; i++)

{

Console.WriteLine("{0}: {1}", headers.GetKey(i), headers[i]);

}

response.Close();