Использование Visual C# для выполнения запроса GET

В этой статье описывается, как выполнить GET запрос на получение веб-страницы из Интернета с помощью Visual C#.

Исходная версия продукта: Visual Studio
Исходный номер базы знаний: 307023

Итоги

Microsoft платформа .NET Framework включает в себя множество полезных классов для сети, включая возможность выполнять веб-запросы.

В этой статье приведены следующие пространства имен библиотеки классов платформа .NET Framework:

  • System.Net
  • System.IO

Требования

В следующем списке описаны рекомендуемые аппаратные и программные средства.

  • Windows
  • Visual Studio

Примечание.

Если вы находитесь за прокси-сервером, необходимо иметь внутренний веб-адрес или статические значения прокси-сервера (см. шаги 5 и 6 раздела "Запрос веб-страницы ") для тестирования кода в этой статье.

Запрос веб-страницы

Возможность программного получения веб-страницы имеет много использования. Эта возможность была предоставлена программистам Visual Basic через управление передачей интернета или с помощью прямого написания кода с помощью API Windows Internet (WinINet).

В .NET System.Net пространства имен предоставляют WebRequest класс для инкапсуляции запроса для ресурса Интернета и WebResponse класса для представления возвращаемых данных.

С помощью этих объектов можно получить поток, представляющий ответ для конкретного запроса. При наличии потока можно прочитать ответ так же, как и из локального текстового файла или из любого другого источника.

Чтобы выполнить GET запрос, выполните следующие действия.

  1. Запустите Visual Studio.

  2. Создайте консольное приложение в Visual C#. Visual Studio автоматически создает открытый класс и пустой Main метод.

  3. Убедитесь, что проект ссылается по крайней мере на System.dll.

  4. Используйте директиву using для System пространства имен, System.NET пространства имен и System.IO пространства имен (для объектов потока), чтобы вам не придется претендовать на объявления из этих пространств имен позже в коде. Эти инструкции необходимо использовать перед любыми другими объявлениями.

    using System;
    using System.Net;
    using System.IO;
    
  5. В этом примере жесткий код URL-адреса в виде переменной. В реальной системе вы, вероятно, получите это значение в качестве параметра функции или в качестве аргумента командной строки консольного приложения.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Создайте новый объект WebRequest. Это можно сделать только через статический Create метод WebRequest класса (новый WebRequest объект недопустим). Укажите целевой URL-адрес в рамках вызова для Create инициализации объекта, имеющего это значение.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Если вы хотите запросить URL-адреса за пределами локальной сети, и вы находитесь за прокси-сервером, необходимо создать WebProxy объект, а затем предоставить этот объект объекту WebRequest . Объект WebProxy имеет различные свойства, которые не задаются в приведенном ниже примере кода, что позволяет указать те же основные сведения, которые можно задать с помощью параметров прокси-сервера в Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Если вы хотите использовать параметры, которые уже настроены в Internet Explorer, можно использовать статический GetDefaultProxy метод WebProxy класса.

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Примечание.

    В Visual Studio 2005 или Visual Studio 2008 GetDefaultProxy метод работает. Однако этот метод не рекомендуется. Дополнительные сведения о методе GetDefaultProxy в платформа .NET Framework 2.0 см. в платформа .NET Framework списке устаревших типов и членов версии 2.0 (по сборке).

  9. Завершив настройку запроса, задав целевой URL-адрес и предоставив все применимые сведения о прокси-сервере, вы можете использовать запрос для получения Stream объекта, соответствующего ответу на запрос.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. При наличии потока ответа можно использовать поток, как и любой другой поток, и вы можете считывать содержимое строки потока по строке или даже одновременно. Следующий пример цикла кода считывает поток по одной строке за раз, пока ReadLine метод не возвращает значение NULL, выводя каждую строку в консоль.

    StreamReader objReader = new StreamReader(objStream);
    
    string sLine = "";
    int i = 0;
    
    while (sLine != null)
    {
        i++;
        sLine = objReader.ReadLine();
        if (sLine != null)
            Console.WriteLine("{0}:{1}", i, sLine);
    }
    Console.ReadLine();
    
  11. Сохраните и запустите программу. Убедитесь, что вы правильно настроили сведения о прокси-сервере для вашей среды (см. шаги 7 и 8). В консоли должны отображаться строки нумерованного и выходного html-содержимого.

Полный листинг кода

using System;
using System.Net;
using System.IO;

namespace MakeAGETRequest_charp
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            string sURL;
            sURL = "http://www.contoso.com";

            WebRequest wrGETURL;
            wrGETURL = WebRequest.Create(sURL);

            WebProxy myProxy = new WebProxy("myproxy", 80);
            myProxy.BypassProxyOnLocal = true;

            wrGETURL.Proxy = WebProxy.GetDefaultProxy();

            Stream objStream;
            objStream = wrGETURL.GetResponse().GetResponseStream();

            StreamReader objReader = new StreamReader(objStream);

            string sLine = "";
            int i = 0;

            while (sLine != null)
            {
                i++;
                sLine = objReader.ReadLine();
                if (sLine != null)
                    Console.WriteLine("{0}:{1}", i, sLine);
            }
            Console.ReadLine();
        }
    }
}