[C#] Mit HTTPWebRequest auf Seite einloggen

reaLInsanity

New member
Morgen Community :D

Ich habe folgendes Problem, ich will mich auf einer Seite einloggen mit HTTPWebRequest. Also an den Quelltext komme ich bisher ran, mehr aber auch nicht.

Also das Problem ist folgendes: Ich will mich mit einem Benutzer (den man angeben muss) auf unserer Schulhomepage anmelden, dort gibts es den Stundenplan in HTML. Diesen möchte ich dann auslesen und "parsen" sodass ich nur die Tabelle mit dem Stundenplan in einem String habe und diesen dann in einem Webrowsercontrol ausgeben kann.

Also ich komme wie gesagt bereits an den Quelltext einer x-beliebigen Seite ran. Weiß aber nicht wie ich mich einloggen kann und wie ich den Quelltext "parsen" muss um nur an die Tabelle ranzukommen.

Hier mein Code bisher:
Code:
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
httpWebRequest.UserAgent = userAgent;
WebRequest webRequest = (WebRequest)httpWebRequest;
WebResponse webResponse = webRequest.GetResponse();
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
string html = sr.ReadToEnd();

Die Inputs auf der Seite heißen:
user & pass

Vielen Dank schon einmal für die Hilfe.
 

b4ck

New member
du könntest einfach den request den du absendest (zB mit live http headers) abfangen und senden ich weis jedoch nicht ob es in C# geht das man alle http header daten selbst angibt..
 

reaLInsanity

New member
Habs hinbekommen mit dem folgendem Code :)
Code:
// Cookie wird benötigt um die session von PHP aufrecht zu erhalten
            CookieContainer cookieContainer = new CookieContainer();
            string html;
            string loginData = "user=*****&pass=*****&submit=Anmelden&logintype=login&pid=182&redirect_url=";

            // First hit the login page
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.bkukr.de/index.php?id=5");
            req.CookieContainer = cookieContainer;
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] loginDataBytes = encoding.GetBytes(loginData);
            req.ContentLength = loginDataBytes.Length;
            Stream stream = req.GetRequestStream();
            stream.Write(loginDataBytes, 0, loginDataBytes.Length);
            stream.Close();
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            // Packe den Content der Seite die hinter der Authenifizierung liegt
            req = (HttpWebRequest)HttpWebRequest.Create("http://www.bkukr.de/index.php?id=217");
            req.CookieContainer = cookieContainer;
            req.Method = "GET";
            res = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(res.GetResponseStream());
            html = sr.ReadToEnd();

            this.webBrowser1.DocumentText = html;
           // webBrowser1.Document.Body.InnerHtml = html;

Danke für die Antworten :)
Edit: Wie kann ich denn jetzt z.b. eine Table heraus "trennen" z.b. alles was in <table> [INHALT] </table> steht? Also ich will praktisch [inhalt].
 

reaLInsanity

New member
danke :)
aber ich habs nun mit Regular Expressions gelöst, erschien mir der beste Weg. Hier der Code:

Code:
 public string HTTPRequestSchedule(string username, string password)
        {
            Regex myRegex = new Regex("(<table border=\"1\" rules=\"all\" cellpadding=\"1\" cellspacing=\"1\">(.*)</table><br />)", RegexOptions.Singleline);
            string html;
            string loginData = "user="+username+"&pass="+password+"&submit=Anmelden&logintype=login&pid=182&redirect_url=";
            try
            {
                // Cookie wird benötigt um die Session von PHP aufrecht zu erhalten
                CookieContainer cookieContainer = new CookieContainer();
                // Einloggen in die Loginpage
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.bkukr.de/index.php?id=5");
                req.CookieContainer = cookieContainer;
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(loginData);
                req.ContentLength = loginDataBytes.Length;
                Stream stream = req.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                // Packe den Content der Seite die hinter der Authentifizierung liegt
                req = (HttpWebRequest)HttpWebRequest.Create("http://www.bkukr.de/index.php?id=217");
                req.CookieContainer = cookieContainer;
                req.Method = "GET";
                res = (HttpWebResponse)req.GetResponse();
                StreamReader sr = new StreamReader(res.GetResponseStream());
                html = sr.ReadToEnd();

                Match m = myRegex.Match(html);
                return (m.Groups[1].Value);
               
                // webBrowser1.Document.Body.InnerHtml = html;
            }
            catch (Exception err)
            {
                MessageBox.Show("Fehler in HTTPRequestSchedule: "+ err.Message);
                return ("");
            }
            
        }
 
Oben