C#: URL mit WebRequest auslesen

Manchmal kann es notwendig sein, dass man eine URL durch sein C# Programm auslesen muss. Das .NET bietet uns hier den WebRequest und den WebResponse an, um alles was eine URL an Quellcode beinhaltet in eine Variable zu speichern. Ich nutze diese Methodik, um mir, zum Beispiel, Ergebnisse über ein Perl Script zurückgeben zu lassen.

Anbei habe ich Euch ein Snippet bereitgestellt, welches eine komplett funktionsfähige Methode bereitsstellt, um eine URL auszulesen. Die Kommentare innerhalb des Codes sollten alle wichtigen Stellen erklären.

public static string GetUrlResponse(string url, string username, string password)
{
    string content = "";

    // Den WebRequest als HttpWebRequest casten und die URL übergeben
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);

    // Prüfen, ob ein Username und ein Passwort übergeben wurde
    if (string.IsNullOrEmpty(username) == false || string.IsNullOrEmpty(password) == false)
    {
        NetworkCredential networkCredential = new NetworkCredential(username, password);
        wRequest.PreAuthenticate = true;
        wRequest.Credentials = CredentialCache.DefaultCredentials;
    }

    try
    {
        // WebResponse vom WebRequest erstellen
        HttpWebResponse wResponse = (HttpWebResponse)wRequest.GetResponse();

        // StreamReader initiieren, um den Inhalt der URL zu lesen
        StreamReader sr = new StreamReader(wResponse.GetResponseStream(), Encoding.ASCII);
        StringBuilder contentBuilder = new StringBuilder();
        while (-1 != sr.Peek())
        {
            // Zeile für Zeile auslesen
            contentBuilder.Append(sr.ReadLine());
        }

        // Zuweisung des StringBuilder auf String
        content = contentBuilder.ToString();

        // Response abschließen
        wResponse.Close();

        // Request beenden
        wRequest.Abort();
    }
    catch (Exception ex)
    {
        // Falls ein Fehler aufgetreten ist, wird ein Leerstring zurückgegeben
        content = "";
    }
    // Rückgabe
    return content;
}

Ich nutze hier den StringBuilder, denn dieser bietet einen entscheidenen Vorteil. Strings sind feste Größen, die zur Laufzeit nicht mehr geändert werden können. Jedes Mal, wenn Ihr einem String einen neuen Wert zuweist, wird im Hintergrund ein neues String-Objekt initialisiert, diesem wird der neue Wert zugewiesen. Anschließend wird das alte String-Objekt disposed.

Der StringBuilder hingegen kann zur Laufzeit beliebig oft geändert werden, ohne permanent neue String-Objekte zu erstellen. Das bietet eine höhere Performanz, wenn extrem viele Zeilen ausgelesen werden müssen.

Add your comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" extra="">

THE SOURCE OF CODE DOMINATION