C# WebClient Klasse


Um einfache Webanfragen zu erstellen ist die WebClient Klasse von C# hervorragend geeignet. Denn mit Ihr kann man z.B. Problemlos Formulardaten absenden oder Webseiten herunterladen.

1. Versenden von POST Daten

Die benötigten Formulardaten die man für den Post Prozess benötigt, kann man sehr einfach mit Firefox und Firebug auslesen unter dem Tab “Netzwerk”. Hier kann man für einen POST sehr einfach die benötigten Parameter auslesen.

image

Mit diesen Daten füllt man eine “NameValueCollection” und kann dann die Daten per POST absenden mit Hilfe der WebClient Klasse.

WebClient web = new WebClient();
//Wenn es sich z.B. um eine Seite mit WindowsAuthentifizierung handelt im lokalen Netzwerk,
//dann kann man hier die DefaultCredentials verwenden
//web.Credentials = CredentialCache.DefaultCredentials;

//Die POST Parameter erstellen die mit übergeben werden müssen, lassen sich z.B: sehr leicht per Firebug ermitteln
NameValueCollection param = new NameValueCollection();
param.Add("submit", "Anmelden");
param.Add("send", "send");
param.Add("sid", "");
param.Add("l_username", "yourUserName");
param.Add("l_password", "YourPassword");

string url = "http://www.mycsharp.de/wbb2/login.php";
byte[] responsebytes = web.UploadValues(url, "POST", param);
//Der ResponseStream enthält die Webseite die nach dem Login aufgerufen bzw. angezeigt wird.
string responsebody = System.Text.Encoding.Default.GetString(responsebytes);
Console.Write(responsebody);

2. Herunterladen von Bildern

Genauso einfach wie man Formulardaten absenden kann ist es die Bilder einer Webseite herunterzuladen. Hier muss als erstes die Webseite als HTML Gerüst heruntergeladen werden und mit Hilfe der Codeplex Bibliothek Html Agility Pack kann die HTML Seite ganz einfach mit Hilfe von XPath Ausdrücken geparst werden. Mit dem passenden XPath Ausdruck suchen wir uns einfach alle “img” Elemente der Webseite heraus und laden diese herunter und speichern diese lokal ab.

//z.b. Alle Bilder von einem Meiner Blogeinträge herunterladen
string url = "https://squadwuschel.wordpress.com/2012/08/09/ef5-model-first-datenbank-updates-vs-2012/";
WebClient downloadHtml = new WebClient();
//Erst das HTML Gerüst der Webseite herunterladen und in einen String Umwandeln
byte[] htmlpage = downloadHtml.DownloadData(url);
string content = System.Text.Encoding.Default.GetString(htmlpage);

//Das HTML Agilit Pack verwenden um den HTML Code zu parsen
//http://htmlagilitypack.codeplex.com/
HtmlDocument document = new HtmlDocument();
document.LoadHtml(content);

//Mittels XPath Ausdruck alle Images auf der Seite heraussuchen
foreach (HtmlNode img in document.DocumentNode.SelectNodes("//img/@src"))
{
    //Den Pfad für das Bild ermitteln.
    string path = img.Attributes["src"].Value;
    Uri link = new Uri(path);
    try
    {
        //Direkter Download der Datei
        downloadHtml.DownloadFile(path, string.Format("c:\\Temp\\image-{0}.png", ++Counter));
    }
    catch (Exception exception)
    {
        Console.WriteLine("Das Bild mit der Adresse '{0}' konnte nicht heruntergeladen werden.", link);
    }
}


Console.WriteLine("Download Fertig");
Console.ReadLine();

3. Webseiten Status mit WebRequest prüfen

Prüfen ob eine Webseite erreichbar ist mit Hilfe von WebRequest und HttpWebResponse

//Prüfen ob mein Blog erreicht werden kann
string url = "https://squadwuschel.wordpress.com/2012/08/09/ef5-model-first-datenbank-updates-vs-2012/";
try
{
    //Prüfen ob die Webseite erreicht werden kann.
    WebRequest request = WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    if (response.StatusCode == HttpStatusCode.OK)
    {
        Console.WriteLine("STATUS - OK");
        return true;
    }
    else
    {
        Console.WriteLine("Aktueller Status '{0}'", response.StatusCode);
    }

}
catch (Exception exception)
{
    Console.Write(exception);
}

return false;

Codeplex:

Dann unter “Source Code” –> “Browse” –> “Testprojekte” –> “WebClientTest”, dabei handelt es sich um eine einfache Konsolenanwendung.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s