Webseite mit Login/Password aufrufen und Daten auslesen
-
Schönes Wochenende zusammen !
Ich würde gerne in C# eine Webseite (mein tägliches Transfervolumen bei meinem Provider) abrufen und die Daten auslesen.
Ich habe leider keine Ahnung wie ich die Webseite öffnen und gleichzeitig die Login-Daten eingeben kann (würde ich dann fix codieren).
Kann mir jemand einen Hinweis geben ?
Danke
Gawan
-
Einfach die HTTP-Anfrage inklusive eventuellen POST-Daten an den Server schicken und seine Antwort abwarten.
http://de.wikipedia.org/wiki/Http könnte für dich ziemlich interessant seinGreetz
-
Geht das ähnlich einfach wenn es sich um eine HTTPS-Formular handelt ?
-
Pitchen schrieb:
Geht das ähnlich einfach wenn es sich um eine HTTPS-Formular handelt ?
Jop. Nur eben n bisschen komplexer, da man in den meisten Fällen mit Zertifikaten arbeiten muss.
Greetz
-
Kannst du mir vielleicht sagen welche C#-Klassen ich dafür am Besten verwenden kann ?
Danke
Pit
-
Ich habe bisher nur diesen Code gefunden:
using System; using System.Text; using System.Web; using System.Collections; using System.ComponentModel; using System.Data; ... WebBrowser webbowser = new WebBrowser(); webbowser.Url = new Uri("http://www.gmx.de"); HtmlDocument htmldoc = ((WebBrowser)objSender).Document; htmldoc.All["gmx_id"].InnerText = "xxx@gmx.de"; htmldoc.All["gmx_pw"].InnerText = "xxx"; htmldoc.All["login"].InvokeMember("Click");
Ich weiß noch nicht was er macht, da ich beim Ausführen jedesmal die Fehlermeldung
The type or namespace name 'WebBrowser' could not be found (are you missing a using directive or an assembly reference?)
bekomme :(:(
-
So, nun bin ich soweit dass ich das Ganze kompilieren und starten kann.
Nach den ersten beiden Codezeilen
WebBrowser webbowser = new WebBrowser(); webbowser.Url = new Uri("http://www.google.de");
ist aber in webbrowser.Url überhaupt nix drinnen und somit gehts auch nicht mehr weiter. Ich hab echt keine Ahnung mehr....
lG
Pit
-
Probiers mal mit System.Net
Hier ist ein leicht modifiziertes Beispiel aus der MSDNpublic string get_post_webpage(string url, string parameter) { try { // Create a 'WebRequest' object with the specified url. HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url); myWebRequest.CookieContainer = web_cookies;//Ein Cookiecontainer in der Klasse die diese Funktion enthält myWebRequest.Method = "Post"; myWebRequest.ContentType = "application/x-www-form-urlencoded"; byte[] byteArray = Encoding.UTF8.GetBytes(parameter); myWebRequest.ContentLength = byteArray.Length; // Get the request stream. Stream dataStream = myWebRequest.GetRequestStream(); // Write the data to the request stream. dataStream.Write(byteArray, 0, byteArray.Length); // Close the Stream object. dataStream.Close(); // Send the 'WebRequest' and wait for response. HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); // Obtain a 'Stream' object associated with the response object. Stream ReceiveStream = myWebResponse.GetResponseStream(); //Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); Encoding encode = System.Text.Encoding.GetEncoding("iso-8859-1"); // Pipe the stream to a higher level stream reader with the required encoding format. StreamReader readStream = new StreamReader(ReceiveStream, encode); string buffer = ""; // Read 256 charcters at a time. Char[] read = new Char[256]; int count = readStream.Read(read, 0, 256); while (count > 0) { String str = new String(read, 0, count); buffer += str; count = readStream.Read(read, 0, 256); } // Close everything readStream.Close(); myWebResponse.Close(); return buffer; } catch (System.IO.IOException ie) { return "IOException:\n" + ie.Message; } catch (WebException ex) { return "WebException at : " + url + "\n" + ex.Message; } }
-
Wie gesagt: Sockets ... mit dem WebBrowser-Control kommst du glaube ich nicht weit, da du die Daten dann in deinem eigenen Fenster in eigenen Controls anzeigen willst - oder irre ich mich da?
An sich solltest du, wie von Andorxor gezeigt, die Seite downloaden und dann den Quelltext nach deinen Kriterien parsen.
Was aber auch noch eine Möglichkeit ist ists die Seite per WebBrowser-Control zu laden und dann den Quellcode dort zu extrahieren. Is aber Resourcenverschwendung
Greetz
-
Pitchen schrieb:
Ich habe bisher nur diesen Code gefunden:
using System; using System.Text; using System.Web; using System.Collections; using System.ComponentModel; using System.Data; ... WebBrowser webbowser = new WebBrowser(); webbowser.Url = new Uri("http://www.gmx.de"); HtmlDocument htmldoc = ((WebBrowser)objSender).Document; htmldoc.All["gmx_id"].InnerText = "xxx@gmx.de"; htmldoc.All["gmx_pw"].InnerText = "xxx"; htmldoc.All["login"].InvokeMember("Click");
Ich weiß noch nicht was er macht, da ich beim Ausführen jedesmal die Fehlermeldung
The type or namespace name 'WebBrowser' could not be found (are you missing a using directive or an assembly reference?)
bekomme :(:(Das ist mit Sicherheit ein Autologin fuer einen faulen User der ein EmailKonto bei GMX hat!!!
Und deine Fehlermeldung bekommst Du weg in dem Du einen Verweiss auf das BrowserControl in dein Projekt aufnimmst und dann noch eine Using-Direktive auf den dadurch in deinem Projekt neu auftauchenden Namensraum aufnimmst!!!
Der Namensraum ist dann irgendwas mit
using ShDocVw.....
WebBrowser webbowser = new WebBrowser();
ich weiss jetzt nicht ob das so klappt wie hier
das muesste wenn Du den Namensraum ShDocVw in deinem Projekt hast wohl eher so aussehen:
InternetExplorerClass webbrowser = new InternetExplorerClass();
Ich geb Dir mal einen Link zu einem Beitrag von mir der erklärt wie man
an das BrowserControl des InternetExplorer kommt um solche Spässe zu machen!!
http://www.c-plusplus.net/forum/viewtopic-var-t-is-131569.htmlLess dort mal unter dem Punkt:
4.2 Unterstützende Klassen des .NET–Frameworks für die Problemstellung
sowie ist dort ein Link im Beitrag
http://www.c-plusplus.net/forum/viewtopic-var-t-is-121879-and-highlight-is-sclearscreen-and-sid-is-82c15cfda53c330ff9a092e71203833a.html
-
Hier mal eine HTML-Skriptauszug von der Seite www.gmx.de:
[html]<input type="text" name="id" id="gmx_id" style="width: 110px;" accesskey="l" /></div>
<label for="gmx_pw" style="clear: left; color: #FFF; float: left; font-weight: 700; height: 17px; padding-top: 3px; width: 80px;">Passwort:</label>
<div style="float: left; height: 17px; width: 120px;"><input type="password" name="p" id="gmx_pw" style="width: 110px;" /></div>[/html]guck dir den HTML-Auszug mal in Ruhe an, dann sollte klar werden was es mit
htmldoc.All["gmx_id"].InnerText = "xxx@gmx.de"; htmldoc.All["gmx_pw"].InnerText = "xxx"; htmldoc.All["login"].InvokeMember("Click");
auf sich hat