Laden...

Wie nutze ich cookies?

Erstellt von EvilDragon vor 16 Jahren Letzter Beitrag vor 16 Jahren 7.077 Views
E
EvilDragon Themenstarter:in
34 Beiträge seit 2007
vor 16 Jahren
Wie nutze ich cookies?

Hab jetzt schon einiges gelesen und versucht aber bekomme einfach nichts hin...

ich möchte mich bei einer seite einloggen und dann noch mal eine anfrage bzw url aufrufenund mir den code ausgeben um zu sehen ob ich eingeloggt bin

For public Form1:
HttpWebRequest httpRequest;

code für POST (login):

public HttpWebRequest GenerateHttpWebRequest_post(string uriString, string postData, string contentType)
        {
            // URI-Objekt erzeugen
            Uri uri = new Uri(uriString);
            // Die ursprüngliche Anfrage erzeugen
            httpRequest = (HttpWebRequest)WebRequest.Create(uri);

            // Die Bytes für die bereits maskierten Daten holen
            byte[] bytes = Encoding.UTF8.GetBytes(postData);

            // Den ContentTyp für die zu versendenden einrichten
            httpRequest.ContentType = contentType; //"application/x-www-form-urlencoded"; bei Formularen
            httpRequest.Method = "POST";

            // Die Länge der zu übermittelnden Daten setzen.
            httpRequest.ContentLength = postData.Length;

            // den Anfrage-Strem holen und ihn in die POST-Daten schreiben.
            using (Stream requestStream = httpRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }
            // Die Anfrage zurückliefern
            return httpRequest;
        }

Mein Button für abfrage:

string frage = "ownnickname=****&ownpassword=****";
            string contenttype = "application/x-www-form-urlencoded";
            string html = "";
            HttpWebRequest daten;

            daten = GenerateHttpWebRequest_post("http://www.codedragon.de/index.php?do=user_login.php", frage, contenttype); 

            using (HttpWebResponse response = (HttpWebResponse)daten.GetResponse())
            {
                // Antwort-Stream anfordern
                Stream responseStream = response.GetResponseStream();
                // Einen Stream-Reader verwenden, der UTF8 versteht.
                using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
                {
                    html = reader.ReadToEnd();
                }
            }

            richTextBox1.Text = html;

            //webBrowser1.Navigate("http://www.codedragon.de", false);

Wie man sieht logge ich mich ein und gebe dann den quellcode in eine RTB wieder, da sehe ich dann auch " erfolgreich eingeloggt werden in 5 sek weitergeleitet"

nun würde ich gern noch mal codedragon.de/index.php abrufen und den code in eine RTB2 einfügen, dann würde ich ja sehen, ob noch das loginform da ist oder das usermenü

die seite nutzt cookies und (glaub) sessions, wie kann ich da mit arbeiten bzw da für sorgen das ich bei der nächsten abfrage eingeloggt bin?

wie könnte der code für ein zweiter aufruf sein?

könnte ich das loogin dann auch so nutzen, das ich bei derwebbrowser-komponente eingeloggt bin?

Sorry diese 3 fragen aber was c#, .net und web angeht ist mir alles neu. komme aus der phpecke

danke in voraus denn bisher wurde hier immer gut geholfen

Der größte Fehler ist der menschliche Verstand.
besucht uns auf www.codedragon.de

E
EvilDragon Themenstarter:in
34 Beiträge seit 2007
vor 16 Jahren

Mit diesem Code

private void button2_Click(object sender, EventArgs e)
        {
            string html;
            Uri uri = new Uri("http://www.codedragon.de/index.php");

            HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create("http://www.codedragon.de/index.php");
            sessionRequest.CookieContainer = new CookieContainer();
            HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();

            richTextBox1.Text += sessionRequest.CookieContainer.GetCookieHeader(uri)+"\n";

            HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
            loginRequest.Method = "POST";
            loginRequest.CookieContainer = new CookieContainer();
            //loginRequest.CookieContainer = sessionRequest.CookieContainer;
            string postData = "ownnickname=****&ownpassword=****";
            byte[] bytes = Encoding.UTF8.GetBytes(postData);
            loginRequest.ContentType = "application/x-www-form-urlencoded";
            loginRequest.Method = "POST";
            loginRequest.ContentLength = postData.Length;
            using (Stream requestStream = loginRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Length);
            }

            HttpWebResponse Response = (HttpWebResponse)loginRequest.GetResponse();

            richTextBox1.Text += loginRequest.CookieContainer.GetCookieHeader(uri)+"\n";

            StreamReader ResponseStream = new StreamReader(Response.GetResponseStream());

            html = ResponseStream.ReadToEnd();
            webBrowser1.Document.Body.InnerHtml = html;

        }

Kann ich mich einloggen und erhalte auch eine PHPSession im code, aber die scheint nicht zu stimmen nach dem login steht in der session immer noch guast drin...?

Der größte Fehler ist der menschliche Verstand.
besucht uns auf www.codedragon.de

E
EvilDragon Themenstarter:in
34 Beiträge seit 2007
vor 16 Jahren

ich führe mal mein Monolog weiter

private void button4_Click(object sender, EventArgs e)
        {
            // cookieContainer is used to store the cookies used by the login
            CookieContainer cookieContainer = new CookieContainer();
            string html;
            string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";

            // First hit the login page
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
            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();

            // Then grab the content of the desired page
            req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=personal/meeting.php&pos=|21");
            req.CookieContainer = cookieContainer;
            req.Method = "GET";
            res = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(res.GetResponseStream());
            html = sr.ReadToEnd();

            webBrowser1.Document.Body.InnerHtml = html;
        }

Mit dem Code klappt alles so weit nur bei der neuen Abfrage kann ich mein CookieContainer nicht hinzufügen, da hängt sich das programm immer auf, also:

req.CookieContainer = cookieContainer;

Weise ich einem Container anders einen Container hinzu?

Der größte Fehler ist der menschliche Verstand.
besucht uns auf www.codedragon.de

E
EvilDragon Themenstarter:in
34 Beiträge seit 2007
vor 16 Jahren

und der letzte beitrag zu meinem Monolog löl

Die Lösung:

private void button6_Click(object sender, EventArgs e)
        {
            Uri uri = new Uri("http://www.codedragon.de");
            CookieContainer cookieContainer = new CookieContainer();
            string html;
            string loginData = "ownnickname=****&ownpassword=****&submit=Anmelden";

            HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(uri);
            sessionRequest.CookieContainer = new CookieContainer();
            cookies = sessionRequest.CookieContainer;
            HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
            sessionResponse.Close(); // sehr wichtig!

            richTextBox1.Text += cookies.GetCookieHeader(uri) + "\n";

            // Einloggen
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=user_login.php");
            req.CookieContainer = cookies;
            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();

            // Eine Unterseite z.B. Profil
            req = (HttpWebRequest)HttpWebRequest.Create("http://www.codedragon.de/index.php?do=personal/meeting.php&pos=|21");
            req.CookieContainer = cookies;
            req.Method = "GET";
            res = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(res.GetResponseStream());
            html = sr.ReadToEnd();

            webBrowser1.Document.Body.InnerHtml = html;
        }

man muss den response auch schließen

Der größte Fehler ist der menschliche Verstand.
besucht uns auf www.codedragon.de