Создание запроса GET с помощью Visual C#

В этой статье описывается, как выполнить 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 имеет различные свойства, которые не заданы в примере кода ниже, что позволяет указать те же основные сведения, которые можно задать с помощью параметров прокси-сервера в Интернете Обозреватель.

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

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Примечание.

    В Visual Studio 2005 или Visual Studio 2008 GetDefaultProxy метод работает. Однако этот метод не рекомендуется использовать. Дополнительные сведения о методе GetDefaultProxy в платформа .NET Framework 2.0 см. в разделе платформа .NET Framework 2.0 Устаревший тип/список элементов (по сборке) версии 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();
        }
    }
}