Verwenden von Visual C# zum Ausführen einer GET-Anforderung

In diesem Artikel wird beschrieben, wie Sie mithilfe von Visual C# eine GET Anforderung zum Abrufen einer Webseite aus dem Internet senden.

Ursprüngliche Produktversion: Visual Studio
Ursprüngliche KB-Nummer: 307023

Zusammenfassung

Die Microsoft .NET Framework enthält viele nützliche Klassen für Netzwerke, einschließlich der Möglichkeit, Webanforderungen zu stellen.

Dieser Artikel bezieht sich auf die folgenden .NET Framework Klassenbibliotheksnamespaces:

  • System.Net
  • System.IO

Anforderungen

Die folgende Liste enthält die empfohlene Hardware und Software, die Sie benötigen:

  • Windows
  • Visual Studio

Hinweis

Wenn Sie sich hinter einem Proxyserver befinden, benötigen Sie entweder eine interne Webadresse oder statische Proxywerte (siehe Schritte 5 und 6 des Abschnitts Anfordern einer Webseite ), um den Code in diesem Artikel zu testen.

Anfordern einer Webseite

Die Möglichkeit, eine Webseite programmgesteuert abzurufen, hat viele Verwendungsmöglichkeiten. Diese Möglichkeit wurde Visual Basic-Programmierern über das Internetübertragungssteuerelement oder durch direkte Codierung für die Windows-Internet-APIs (WinINet) bereitgestellt.

In .NET stellen die System.Net Namespaces die WebRequest -Klasse zum Kapseln einer Anforderung für eine Internetressource und die WebResponse -Klasse bereit, um die zurückgegebenen Daten darzustellen.

Mithilfe dieser Objekte können Sie einen Stream abrufen, der die Antwort für eine bestimmte Anforderung darstellt. Wenn Sie über einen Stream verfügen, können Sie die Antwort genauso lesen, wie Sie aus einer lokalen Textdatei oder aus einer anderen Quelle lesen.

Führen Sie die folgenden Schritte aus, um eine GET Anforderung zu stellen:

  1. Starten Sie Visual Studio.

  2. Erstellen Sie eine neue Konsolenanwendung in Visual C#. Visual Studio erstellt automatisch eine öffentliche Klasse und eine leere Main Methode.

  3. Stellen Sie sicher, dass das Projekt mindestens aufSystem.dllverweist.

  4. Verwenden Sie die using-Direktive für den System Namespace, den System.NET Namespace und den System.IO Namespace (für die Streamobjekte), damit Sie Deklarationen aus diesen Namespaces später in Ihrem Code nicht qualifizieren müssen. Diese Anweisungen müssen vor allen anderen Deklarationen verwendet werden.

    using System;
    using System.Net;
    using System.IO;
    
  5. In diesem Beispiel müssen Sie die URL als Variable hartcodieren. In einem echten System erhalten Sie diesen Wert wahrscheinlich als Parameter für eine Funktion oder als Befehlszeilenargument für eine Konsolenanwendung.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Dient zum Erstellen eines neuen Objekts vom Typ WebRequest. Dies ist nur über die statische Create Methode der WebRequest -Klasse möglich (neu ist ein WebRequest Objekt ungültig). Geben Sie die Ziel-URL als Teil des Aufrufs von an, Create um das Objekt mit diesem Wert zu initialisieren.

    WebRequest wrGETURL;
    wrGETURL = WebRequest.Create(sURL);
    
  7. Wenn Sie URLs außerhalb des lokalen Netzwerks anfordern möchten und sich hinter einem Proxy befinden, müssen Sie ein WebProxy -Objekt erstellen und dieses Objekt dann für Ihr WebRequest Objekt bereitstellen. Das WebProxy -Objekt verfügt über eine Vielzahl von Eigenschaften, die im folgenden Beispielcode nicht festgelegt sind, mit denen Sie die gleichen grundlegenden Informationen angeben können, die Sie über die Proxyeinstellungen in Internet Explorer festlegen können.

    WebProxy myProxy = new WebProxy("myproxy",80);
    myProxy.BypassProxyOnLocal = true;
    
    wrGETURL.Proxy = myProxy;
    
  8. Wenn Sie die Einstellungen verwenden möchten, die bereits in Internet Explorer konfiguriert wurden, können Sie die GetDefaultProxy statische Methode der WebProxy -Klasse verwenden.

    wrGETURL.Proxy = WebProxy.GetDefaultProxy();
    

    Hinweis

    In Visual Studio 2005 oder Visual Studio 2008 funktioniert die GetDefaultProxy Methode. Diese Methode ist jedoch veraltet. Weitere Informationen zur GetDefaultProxy -Methode im .NET Framework 2.0 finden Sie unter .NET Framework V2.0 Obsolete Type/Member List (By Assembly).

  9. Wenn Sie die Einrichtung Ihrer Anforderung abgeschlossen haben, indem Sie die Ziel-URL festgelegt und entsprechende Proxyinformationen angegeben haben, können Sie Ihre Anforderung verwenden, um ein Stream Objekt abzurufen, das der Antwort für Ihre Anforderung entspricht.

    Stream objStream;
    objStream = wrGETURL.GetResponse().GetResponseStream();
    
  10. Wenn Sie über den Antwortstream verfügen, können Sie den Datenstrom wie jeden anderen Datenstrom verwenden, und Sie können den Inhalt des Datenstroms Zeilen für Zeile oder sogar alle gleichzeitig lesen. Die folgende Beispielcodeschleife liest den Stream zeilenweise, bis die ReadLine Methode NULL zurückgibt, indem jede Zeile an die Konsole ausgegeben wird.

    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. Speichern Sie das Programm, und führen Sie es dann aus. Vergewissern Sie sich, dass Sie die Proxyinformationen für Ihre Umgebung ordnungsgemäß konfiguriert haben (siehe Schritt 7 und 8). Es sollten Zeilen mit HTML-Inhalten nummeriert und an die Konsole ausgegeben werden.

Vollständige Codeauflistung

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