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.NetSystem.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:
Starten Sie Visual Studio.
Erstellen Sie eine neue Konsolenanwendung in Visual C#. Visual Studio erstellt automatisch eine öffentliche Klasse und eine leere
MainMethode.Stellen Sie sicher, dass das Projekt mindestens System.dll verweist.
Verwenden Sie die using-Direktive für den
SystemNamespace, denSystem.NETNamespace und denSystem.IONamespace (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;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";Dient zum Erstellen eines neuen Objekts vom Typ
WebRequest. Sie können dies nur über die statische Methode der Klasse tunCreateWebRequest( ein neues ObjektWebRequestist ungültig). Geben Sie die Ziel-URL als Teil des Aufrufs zum Initialisieren des Objekts mitCreatediesem Wert an.WebRequest wrGETURL; wrGETURL = WebRequest.Create(sURL);Wenn Sie URLs außerhalb des lokalen Netzwerks anfordern möchten und sich hinter einem Proxy befinden, müssen Sie ein Objekt erstellen
WebProxyund dieses Objekt dann für Ihr ObjektWebRequestbereitstellen. DasWebProxyObjekt 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;Wenn Sie die Einstellungen verwenden möchten, die bereits in Internet Explorer konfiguriert wurden, können Sie die
GetDefaultProxystatische Methode der KlasseWebProxyverwenden.wrGETURL.Proxy = WebProxy.GetDefaultProxy();Hinweis
In Visual Studio 2005 oder Visual Studio 2008 funktioniert die
GetDefaultProxyMethode. Diese Methode ist jedoch veraltet. Weitere Informationen zurGetDefaultProxyMethode im .NET Framework 2.0 finden Sie unter .NET Framework Veraltete V2.0-Typ-/Memberliste (nach Assembly).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
StreamObjekt abzurufen, das der Antwort für Ihre Anforderung entspricht.Stream objStream; objStream = wrGETURL.GetResponse().GetResponseStream();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
ReadLineMethode 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();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();
}
}
}