A
awaiK
Hallo,
ich hab Probleme einem HttpWebRequest ein zuvor empfangenes Cookie mitzugeben.Hoffe ihr könnt mir helfen.
Ich benutze folgenden Code:
Hiermit besuche ich erstmal die Seite mit dem Anmeldeformular, um das Cookie zu empfangen. Im Debugger habe ich kontrolliert, dass ich ein Cookie empfange. Dann leg ich es im CookieContainer "Cookies" ab, um es dem nächsten request mitzugeben.:
Der nächste Codeabschnitt ruft das Script auf, welches die Daten entgegennimmt und kontrolliert usw. Diesem request möchte ich auch das Cookie mitgeben.:
Das einzige Problem scheint zu sein, dass das Cookie nicht mitübergeben wird. Ich habe den Loginvorgang per Browser mal mit mitgeloggt, sowie den Loginvorgang, den das Programm erzeugt:
Browser:
Mein Programm:
Den einzigen (meiner Meinung nach relevanten) Unterschied sehe ich darin, dass bei mir Cookie: testec=1 fehlt. Per Debugger habe ich im Objekt "Cookies" eine Eigenschaft names "Name" und dem Wert "testec" gefunden. Was also bedeutet das mein Programm das Cookie schon entgegennimmt.
ich hab Probleme einem HttpWebRequest ein zuvor empfangenes Cookie mitzugeben.Hoffe ihr könnt mir helfen.
Ich benutze folgenden Code:
Code:
string postData = "username=hachi&password=password"; //Daten die an die Webseite gesendet werden sollen
byte[] postDataArray = Encoding.ASCII.GetBytes(postData); //In Bytes konvertieren, zum versenden
CookieCollection Cookies= new CookieCollection(); //Objekt in dem das empfangene Cookie abgelegt wird
HttpWebRequest request0 = (HttpWebRequest)WebRequest.Create("http://www.seite.de/login.html");
request0.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)request0.GetResponse();
Cookies= response.Cookies; //Empfangenes Cookie wird abgelegt
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("http://www.seite.de/login.html?do=login");
request1.CookieContainer = new CookieContainer();
request1.ContentType = "application/x-www-form-urlencoded";
request1.ContentLength = postDataArray.Length;
request1.Method = "POST";
request1.Referer = "http://www.seite.de/login.html";
request1.ServicePoint.Expect100Continue = false;
request1.Timeout = 30000;
request1.CookieContainer.Add(cookies); //Zuvor abgelegtes Cookie wird request1 angehängt und später abgeschickt!
Stream requestStream = request1.GetRequestStream();
requestStream.Write(postDataArray, 0, postDataArray.Length);
requestStream.Close();
response = (HttpWebResponse)request1.GetResponse();
...
...
...
Hiermit besuche ich erstmal die Seite mit dem Anmeldeformular, um das Cookie zu empfangen. Im Debugger habe ich kontrolliert, dass ich ein Cookie empfange. Dann leg ich es im CookieContainer "Cookies" ab, um es dem nächsten request mitzugeben.:
Code:
HttpWebRequest request0 = (HttpWebRequest)WebRequest.Create("http://www.seite.de/login.html");
request0.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)request0.GetResponse();
Cookies= response.Cookies;
Der nächste Codeabschnitt ruft das Script auf, welches die Daten entgegennimmt und kontrolliert usw. Diesem request möchte ich auch das Cookie mitgeben.:
Code:
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create("http://www.seite.de/login.html?do=login");
request1.CookieContainer = new CookieContainer();
request1.ContentType = "application/x-www-form-urlencoded";
request1.ContentLength = postDataArray.Length;
request1.Method = "POST";
request1.Referer = "http://www.seite.de/login.html";
request1.ServicePoint.Expect100Continue = false;
request1.Timeout = 30000;
request1.CookieContainer.Add(cookies); // Cookie wird request1 angehängt und später abgeschickt
Das einzige Problem scheint zu sein, dass das Cookie nicht mitübergeben wird. Ich habe den Loginvorgang per Browser mal mit mitgeloggt, sowie den Loginvorgang, den das Programm erzeugt:
Browser:
Code:
POST /login.html?do=login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml,
application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel,
application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, */*
Referer: http://www.seite.de/login.html
Accept-Language: de
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; .NET CLR 2.0.50727; .NET CLR 3.5.21022)
Host: seite.de
Content-Length: 43
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: testec=1
Mein Programm:
Code:
POST /logn.html?do=login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: seite.de
Content-Length: 187
Den einzigen (meiner Meinung nach relevanten) Unterschied sehe ich darin, dass bei mir Cookie: testec=1 fehlt. Per Debugger habe ich im Objekt "Cookies" eine Eigenschaft names "Name" und dem Wert "testec" gefunden. Was also bedeutet das mein Programm das Cookie schon entgegennimmt.