Cookie-Support im .NET CF
Hey zusammen,
ich bin grade dabei eine Anwendung zu entwickeln und muss dazu im Hintergrund den Login auf eine Webseite und dann einige Aktionen auf der Webseite durchführen. Leider fehlt im CF der Cookie-Support und ich kann mich nicht dauerhaft auf der Seite anmelden. Habt Ihr ne Idee wie man das Problem lösen oder umgehen kann?
Matze
AW: Cookie-Support im .NET CF
Versuch mal eine erste HttpWebResponse der Seite zu erhalten und dann von dieser response die cookies auszulesen. Dann einen neuen request erstellen und diesem request die cookies setzen.
Code:
private void TestCookie(string url)
{
Uri uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.MaximumAutomaticRedirections = 1;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string cookie = response.Headers["Set-Cookie"];
if (!string.IsNullOrEmpty(cookie))
{
request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("Cookie", cookie);
response = (HttpWebResponse)request.GetResponse();
}
}
AW: Cookie-Support im .NET CF
Vielen Dank schonmal!
Ich hab jetzt mal versucht, das so einzubauen, bin aber bisher noch keinen Schritt weiter. Vielleicht mache ich ja einfach was komplett falsch?
Code:
string sessionCookie;
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(new Uri("https://login.o2online.de/loginRegistration/loginAction.do?_flowId=login&o2_type=asp&o2_label=login/comcenter-login&scheme=http&port=80&server=email.o2online.de&url=%2Fssomanager.osp%3FAPIID%3DAUTH-WEBSSO%26TargetApp%3D%2Fsms_new.osp%3F%26o2_type%3Durl%26o2_label%3Dweb2sms-o2online"));
httpRequest.Method = "GET";
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
sessionCookie = httpResponse.Headers["Set-Cookie"];
MessageBox.Show("Webseite funktioniert");
if (!string.IsNullOrEmpty(sessionCookie))
{
MessageBox.Show("Cookie OK:" + sessionCookie);
httpResponse.Close();
httpRequest = (HttpWebRequest)WebRequest.Create(new Uri("https://login.o2online.de/loginRegistration/loginAction.do"));
httpRequest.Method = "POST";
string postData = "loginName=" + checkTelNr() + "&password=" + UrlEncode(mtxtPass.Text) + "&_eventId=login"; //http://dalelane.co.uk/blog/?p=894
byte[] buffer = Encoding.ASCII.GetBytes(postData);
//httpRequest.ContentLength = buffer.Length;
httpRequest.AllowWriteStreamBuffering = true;
httpRequest.Headers.Add("Cookie", sessionCookie);
Stream postDataStr = httpRequest.GetRequestStream();
postDataStr.Write(buffer, 0, buffer.Length);
postDataStr.Flush();
postDataStr.Close();
httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream responseStream = httpResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
string ret = responseReader.ReadToEnd();
MessageBox.Show("Return: " + ret);
if (ret.Contains("Cookies nicht aktiviert"))
{
MessageBox.Show("Fehler beim setzen des Cookies");
}
}
else
{
MessageBox.Show("Cookie-Fehler");
httpResponse.Close();
}
//EDIT//
So ich habe mal noch weitergesucht und doch einige Ansätze gefunden. Leider bin ich scheinbar unfähig, die ganzen Sachen richtig anzuwenden. Hier mal meine Quellen:
http://www.pcreview.co.uk/forums/thread-1309088.php
http://groups.google.com/group/micro...b642d1deb28f95
http://ondotnet.com/pub/a/dotnet/200...rviceapps.html
http://www.circumdev.net/post/Net-CF...e-Support.aspx
AW: Cookie-Support im .NET CF
Hmm, wenn ich bei solchen Sachen nicht mehr weiterkomme, erstelle ich mir ein Testprogramm mit dem full framework, implementiere die Aufgabe da und wenn's läuft, versuche ich die nicht im compact framework enthaltenen Klassen/Methoden zu ersetzen (also immer noch auf dem PC).
AW: Cookie-Support im .NET CF
OK, danke für den Hinweis, dann werde ich das wohl mal so versuchen :)