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.