Читать «C# 4.0: полное руководство» онлайн - страница 654

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

public virtual Uri - Получает URI, по которому был сформирован ответ.

ResponseUri { get; } - Этот идентификатор может отличаться от запрашиваемого, если ответ был переадресован по другому URI

Классы HttpWebRequest и HttpWebResponse

Оба класса, HttpWebRequest и HttpWebResponse, наследуют от классов WebRequest и WebResponse и реализуют протокол HTTP. В ходе этого процесса в обоих классах вводится ряд дополнительных свойств, предоставляющих подробные сведения о транзакции по протоколу HTTP. О некоторых из этих свойств речь пойдет далее в настоящей главе. Но для выполнения простых операций в Интернете эти дополнительные свойства, как правило, не требуются.

Первый простой пример

Доступ к Интернету организуется на основе классов WebRequest и WebResponse. Поэтому, прежде чем рассматривать этот процесс более подробно, было бы полезно обратиться к прострму примеру, демонстрирующему порядок доступа к Интернету по принципу запроса и ответа. Глядя на то, как эти классы применяются на практике, легче понять, почему они организованы именно так, а не как-то иначе.

В приведенном ниже примере программы демонстрируется простая, но весьма типичная для Интернета операция получения гипертекстового содержимого из конкретного веб-сайта. В данном случае содержимое получается из веб-сайта издательства McGraw-Hill по адресу www.McGraw-Hill.com, но вместо него можно подставить адрес любого другого веб-сайта. В этой программе гипертекстовое содержимое выводится на экран монитора отдельными порциями по 400 символов, чтобы полученную информацию можно было просматривать, не прибегая к прокрутке экрана.

// Пример доступа к веб-сайту.

using System;

using System.Net;

using System.IO;

class NetDemo {

  static void Main() {

    int ch;

    // Сначала создать объект запроса типа WebRequest по указанному URI.

    HttpWebRequest req = (HttpWebRequest)

             WebRequest.Create();

    // Затем отправить сформированный запрос и получить на него ответ.

    HttpWebResponse resp = (HttpWebResponse) req.GetResponse();

    // Получить из ответа поток ввода.

        Stream istrm = resp.GetResponseStream();

    /* А теперь прочитать и отобразить гипертекстовое содержимое, полученное по указанному URI. Это содержимое выводится на экран отдельными порциями по 400 символов. После каждой такой порции следует нажать клавишу <ENTER>,чтобы вывести на экран следующую порцию из 400 символов. */

    for (int i = 1; ; i++) {

      ch = istrm.ReadByte();

      if (ch == -1) break;

      Console.Write((char)ch);

      if ((i % 400)== 0) {

      Console.Write("\nНажмите клавишу <Enter>.");

      Console.ReadLine();

    }

  }

    // Закрыть ответный поток. При этом закрывается также поток ввода  istrm.

    resp.Close();

}

}

Ниже приведена первая часть получаемого результата. (Разумеется, это содержимое может со временем измениться в связи с обновлением запрашиваемого веб-сайта, и поэтому у вас оно может оказаться несколько иным.)

<html>

<head>

<title>Home - The McGraw-Hill Companies</title>