C# - Login mit Cookies per HTTP-POST versenden
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
benutzer
betreffenden spezifikationen
code
datum
einloggen
funktionieren
funktioniert code
header
http
login
nachdenken
parameter
post
programm
schritt
string
system
text
weg
weiterleitung
-
Hallo Limas,
Ich schreibe gerade mit C# ein Programm, bei dem der Benutzer seine Zugangsdaten für einen passwortgeschützten Bereich auf der Website eingeben soll, das Programm soll diese Daten per HTTP-Post an den Webserver senden und den Benutzer auf der Site einloggen.
Die Site, auf der ich mich einloggen möchte, verlangt allerdings Cookies und liefert mir so immer die Meldung, dass der Login nicht möglich ist, da die Cookies deaktiviert sind. Ich suche nun eine Möglichkeit, mit C# Cookies zu simulieren, sodass der Login möglich ist. Dabei soll HttpWebRequest verwendet werden.
Hier mein aktuell genutzter Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Windows.Forms; [...] private string sendLoginData(string username, string password) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://example.org/loginscript"); CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; request.Method = "POST"; string postData = "username=" + username + "&password=" + password; byte[] byteArray = Encoding.UTF8.GetBytes(postData); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = byteArray.Length; Stream dataStream = request.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); WebResponse response = request.GetResponse(); if ((((HttpWebResponse)response).StatusDescription) != "OK") return (((HttpWebResponse)response).StatusDescription); dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); reader.Close(); dataStream.Close(); response.Close(); return responseFromServer; } [...]
Ich dachte eigentlich, dass das ganze aufgrund des CookieContainers funktionieren müsste, es klappt aber nicht.
Es ist vielleicht noch zu erwähnen, dass ich auf die Scripts, die auf dem Webserver liegen, keinen Einfluss habe, d.h. ich kann die Scripts auf dem Server nicht so umschreiben, dass keine Cookies verwendet werden.
Wer kann mir helfen?
MfG mermadalis -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Zunächst mal holst du dir die Cookies aus dem Postdata-Request, mit dem du im selben Schritt die Logindaten übermittelt hast.
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string Text = ""; // Cookie-Ausgabe foreach (Cookie cook in response.Cookies) { Text += "COOKIE: " + cook.Name + " = " + cook.Value + "\r\n"; }
Achte dabei unbedingt darauf, dass du Automatische Weiterleitungen verhinderst ! Sonst wirst du mit einem
header('Location: foo.bar');
innerhalb des PHP-Codes sofort wieder um deine Results gebracht und bekommst einen überschrieben Content, der keine Cookies mehr enthält. Folgendermaßen:
request.MaximumAutomaticRedirections = 1; // Falls eine Weiterleitung nötig ist request.AllowAutoRedirect = false; // Ansonsten nur das hier // Teste selbst, welches von beiden funktioniert.
Jedem weiteren Request musst du dann das Cookie als Parameter hinzufügen, viarequest.CookieContainer = new CookieContainer(); Cookie cookie = new Cookie("PHPSESSID", "Wert", "Relativer Pfad", "Domain"); request.CookieContainer.Add(cookie);
Damit sollte es funktionieren, dem WebBot steht also nichts mehr im Wege.
Liebe Grüße
- VampireSilence -
Lesen. Nachdenken. Posten.
Ich werde bestimmt nichts hier rein schreiben, was nicht funktioniert also is deine Frage schon beantwortet.
Was die Cookies angeht:
Du generierst ein neues Cookie mit den betreffenden Spezifikationen, fügst dies der Cookiesammlung hinzu und fertig. Was gibts daran nicht zu verstehen ?
Liebe Grüße
- VampireSilence -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage