Verwenden von Visual C# zum Erstellen einer GET-Anforderung

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

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 Klassenbibliothek-Namespaces:

  • 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 zum 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 für Visual Basic Programmierer über die Internetübertragungssteuerung oder durch direktes Codieren mit den winINet-APIs (Windows Internet) bereitgestellt.

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

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

Gehen Sie folgendermaßen vor, 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 System.dll verweist.

  4. Verwenden Sie die using-Direktive für den System Namespace, den System.NET Namespace und den System.IO Namespace (für die Datenstromobjekte), damit Sie Deklarationen aus diesen Namespaces später im 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 wird die URL als Variable hartcodierbar. In einem echten System würden Sie diesen Wert wahrscheinlich als Parameter für eine Funktion oder als Befehlszeilenargument für eine Konsolenanwendung erhalten.

    string sURL;
    sURL = "http://www.contoso.com";
    
  6. Dient zum Erstellen eines neuen Objekts vom Typ WebRequest. Sie können dies nur über die statische Methode der Klasse tun Create WebRequest ( ein neues Objekt WebRequest ist ungültig). Geben Sie die Ziel-URL als Teil des Aufrufs zum Initialisieren des Objekts mit Create diesem Wert an.

    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 Objekt erstellen WebProxy und dieses Objekt dann für Ihr Objekt WebRequest bereitstellen. Das WebProxy Objekt verfügt über eine Vielzahl von Eigenschaften, die nicht im folgenden Beispielcode 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 Klasse WebProxy 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 Veraltete V2.0-Typ-/Memberliste (nach Assembly).

  9. Wenn Sie die Einrichtung Ihrer Anforderung abgeschlossen haben, indem Sie die Ziel-URL festlegen und alle zutreffenden Proxyinformationen angeben, 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 Antwortdatenstrom verfügen, können Sie den Datenstrom wie jeden anderen Stream verwenden und den Inhalt der Datenstromzeile zeilenweise oder sogar alle gleichzeitig lesen. In der folgenden Beispielcodeschleife wird der Datenstrom zeilenweise gelesen, 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 aus. Stellen Sie sicher, dass Sie die Proxyinformationen für Ihre Umgebung ordnungsgemäß konfiguriert haben (siehe Schritte 7 und 8). Es sollten Zeilen mit HTML-Inhalt 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();
        }
    }
}