Autor Beitrag
Rudi1982
Hält's aus hier
Beiträge: 2

Windows 7 Ultimate
Visual Studio 2010 Prof., C#
BeitragVerfasst: Do 03.11.11 16:56 
Hallo Leute,

ich kämpfe schon seid einigen Tagen mit meinem Projekt herum und stöbere im Internet nach Hilfestellungen bzw. Lösung meines Problems. Nun bin ich zu Euch gestoßen, in der Hoffnung, dass mir hier irgendjemand helfen kann.

Nun zu meinem Problem:

Ich versuche mich hier einzuloggen und mit Daten von diversen Unterseiten zu arbeiten. Keine Sorge, die Daten sind frei zugänglich, da auch die Login-Daten öffentlich sind...

Wenn ich jetzt mit dem Server kommuniziere (HTTPWebRequest), erhalte ich ein Websession-Cookie, dass ich in einem CookieContainer ablege. Mit diesem Websession-Cookie und den Login-Daten kann ich mich auch erfolgreich einloggen und ab da wirds knifflig. Der Server antwortet mit zwei neuen Cookies auf den Login, die auch im Container abgelegt werden. Beim nächsten Request werden alle drei Cookies benötigt, also Websession und die zwei neuen, aber der Container übergibt nur den Websession-Cookie...

Ich hab auch mittels CookieContainer.Count geprüft, ob sie alle drei Cookies im Container befinden. Sie sind auch da wo sie sein sollte, aber warum übergibt der Container jetzt nur das erste Cookie und nicht alle drei?

Hier noch ein bisschen Code:
Zitat:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
        public string HTTPConnection(string Host, string request)
        {

            string Weblogin = "LOGON_USERID=XXXXXXXX&LOGON_PASSWD=XXXXXXX";
            string UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)";
            
            // Versuche eine Verbindung aufzubauen, um ein WebSession-Cookie zu erhalten
            try
            {
                HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(Host + "startTetisAction.do?DOMAIN=Internet");
                sessionRequest.UserAgent = UserAgent;
                sessionRequest.CookieContainer = CookieCont;
                HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
                sessionResponse.Close(); // sehr wichtig!
            }
            catch
            {
                MessageBox.Show("Konnte keine Verbindung herstellen");
            }

            // Einlogversuch
            toolStripStatusLabel1.Text = "Anmeldungsversuch...";
            try
            {
                HttpWebRequest LoginRequest = (HttpWebRequest)HttpWebRequest.Create(Host + "startTetisAction.do");
                LoginRequest.CookieContainer = CookieCont;
                LoginRequest.Method = "POST";
                LoginRequest.UserAgent = UserAgent;
                LoginRequest.ContentType = "application/x-www-form-urlencoded";
                LoginRequest.ServicePoint.Expect100Continue = false;
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(Weblogin);
                LoginRequest.ContentLength = loginDataBytes.Length;
                Stream stream = LoginRequest.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();

                WebResponse LoginResponse = LoginRequest.GetResponse();
                LoginResponse.Close();
                
                toolStripStatusLabel1.Text = "Angemeldet";
            }
            catch (Exception)
            {
                Console.WriteLine("Konnte nicht verbinden...");
            }

            // versuche eine Unterseite zu erreichen

            try
            {   // Hier werden alle drei Cookis benötigt
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(Host + "zeigePortalNavAction.do");
                req.CookieContainer = CookieCont;
                req.Method = "GET";
                req.UserAgent = UserAgent;
                req.ContentType = "application/x-www-form-urlencoded";
                req.ServicePoint.Expect100Continue = false;

                WebResponse myWebResponse = req.GetResponse();
                myWebResponse.Close();
            }
            catch (Exception)
            {
                Console.WriteLine("Konnte keinen Request empfangen...");
            }
            return "0";
        }


MfG
Rudi1982 Threadstarter
Hält's aus hier
Beiträge: 2

Windows 7 Ultimate
Visual Studio 2010 Prof., C#
BeitragVerfasst: Fr 04.11.11 12:00 
Keiner ne Idee?

MfG
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Sa 05.11.11 19:20 
Hi,
werde jetzt einfach mal dazu was schreiben. Also der Code arbeitet doch so, wie er soll!
Habe mir mal den Code des 3. Requests angeschaut ("zeigePortalNavAction.do"). Kommt doch genau das Gleiche bei raus, als ob ich im Browser angemeldet bin und die Seite ansurfe.
Was hast Du denn da für ein Problem?
Thread bei myCSharp: www.mycsharp.de/wbb2...n+do+DOMAIN+Internet
Allerdings ist der Code mit dem try...catch auch nicht gerade gut gelöst. Denn wenn schon die erste Abfrage fehl schlägt, wird trotzdem weitergearbeitet...