Tworzenie żądania GET przy użyciu języka Visual C#

W tym artykule opisano sposób żądania GET pobrania strony internetowej z Internetu przy użyciu języka Visual C#.

Oryginalna wersja produktu: Visual Studio
Oryginalny numer KB: 307023

Podsumowanie

Usługa Microsoft .NET Framework zawiera wiele przydatnych klas sieci, w tym możliwość wykonywania żądań internetowych.

W tym artykule opisano następujące przestrzenie nazw biblioteki klas .NET Framework:

  • System.Net
  • System.IO

Wymagania

Na poniższej liście przedstawiono zalecany sprzęt i oprogramowanie, których potrzebujesz:

  • System Windows
  • Visual Studio

Uwaga

Jeśli jesteś za serwerem proxy, musisz mieć wewnętrzny adres sieci Web lub statyczne wartości serwera proxy (zobacz kroki 5 i 6 sekcji Żądanie strony internetowej ), aby przetestować kod w tym artykule.

Żądanie strony internetowej

Możliwość programowego pobierania strony internetowej ma wiele zastosowań. Ta możliwość została udostępniona programistom języka Visual Basic za pośrednictwem kontroli transferu internetowego lub za pośrednictwem bezpośredniego kodowania interfejsów API Internetu systemu Windows (WinINet).

Na platformie System.Net .NET przestrzenie nazw udostępniają klasę WebRequest do hermetyzacji żądania zasobu internetowego oraz WebResponse klasę reprezentującą zwracane dane.

Za pomocą tych obiektów można uzyskać strumień reprezentujący odpowiedź dla określonego żądania. Jeśli masz strumień, możesz odczytać odpowiedź tak samo jak z lokalnego pliku tekstowego lub z dowolnego innego źródła.

Aby wysłać GET żądanie, wykonaj następujące kroki:

  1. Uruchom program Visual Studio.

  2. Utwórz nową aplikację konsolową w języku Visual C#. Program Visual Studio automatycznie tworzy klasę publiczną i pustą Main metodę.

  3. Sprawdź, czy projekt odwołuje się do co najmniej System.dll.

  4. Użyj dyrektywy using w System przestrzeni nazw, System.NET przestrzeni nazw i System.IO przestrzeni nazw (dla obiektów strumienia), aby nie trzeba było kwalifikować deklaracji z tych przestrzeni nazw w dalszej części kodu. Te instrukcje muszą być używane przed innymi deklaracjami.

    using System;
    using System.Net;
    using System.IO;
    
  5. W tym przykładzie zakoduj adres URL jako zmienną. W rzeczywistym systemie prawdopodobnie otrzymasz tę wartość jako parametr funkcji lub jako argument wiersza polecenia do aplikacji konsolowej.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Utwórz nowy WebRequest obiekt. Można to zrobić tylko za pomocą metody statycznej CreateWebRequest klasy (nowyWebRequest obiekt jest nieprawidłowy). Podaj docelowy adres URL w ramach wywołania, aby Create zainicjować obiekt, który ma tę wartość.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Jeśli chcesz zażądać adresów URL poza siecią lokalną i jesteś za serwerem proxy, musisz utworzyć WebProxy obiekt, a następnie udostępnić ten obiekt obiektowi WebRequest . Obiekt WebProxy ma różne właściwości, które nie są ustawione w poniższym przykładowym kodzie, które umożliwiają określenie tych samych podstawowych informacji, które można ustawić za pośrednictwem ustawień serwera proxy w programie Internet Explorer.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Jeśli chcesz użyć ustawień, które zostały już skonfigurowane w programie Internet Explorer, możesz użyć GetDefaultProxy metody statycznej WebProxy klasy.

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Uwaga

    W programie GetDefaultProxy Visual Studio 2005 lub Visual Studio 2008 metoda działa. Jednak ta metoda została przestarzała. Aby uzyskać więcej informacji na temat GetDefaultProxy metody w .NET Framework 2.0, zobacz .NET Framework V2.0 Przestarzały typ/lista składowa (według zestawu).

  9. Po zakończeniu konfigurowania żądania przez ustawienie docelowego adresu URL i podanie wszelkich odpowiednich informacji o serwerze proxy możesz użyć żądania, aby uzyskać Stream obiekt odpowiadający odpowiedzi na żądanie.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Jeśli masz strumień odpowiedzi, możesz użyć strumienia, tak jak w przypadku dowolnego innego strumienia i odczytywać zawartość strumienia wiersz po wierszu, a nawet wszystkich w tym samym czasie. Poniższa przykładowa pętla kodu odczytuje strumień po jednym wierszu naraz, dopóki metoda nie ReadLine zwróci wartości null, wyprowadzając każdy wiersz do konsoli.

    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. Zapisz, a następnie uruchom program. Sprawdź, czy informacje o serwerze proxy zostały poprawnie skonfigurowane dla środowiska (zobacz kroki 7 i 8). Powinny zostać wyświetlone wiersze zawartości HTML ponumerowane i wyprowadzone do konsoli.

Ukończ listę kodu

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();
        }
    }
}