[.NET] WebRequest Cookie anhängen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Hachi, 16. März 2008 .

Schlagworte:
  1. 16. März 2008
    WebRequest Cookie anhängen

    Hallo,
    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 gespeichert
    
    
    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?!?!
    
    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
    [B]Cookie: testec=1[/B]
    
    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.
     
  2. 18. März 2008
    AW: WebRequest Cookie anhängen

    hm ich kenn mich mit der materie eig. überhaupt nicht aus, was mir spontan jedoch einfällt ist, dass der webservice (?) ja im grunde zustandslos ist, also strukturen zwar angelegt werden können diese aber beim nächsten aufruf wieder leer sind. warum muss das cookie eig. mitgegeben werden? wird ja sowieso am rechner des users abgelegt oder?
     
  3. 20. März 2008
    AW: WebRequest Cookie anhängen

    Ja stimmt schon, das Cookie wird vom Browser des Users erstellt, aber Seite legen dort zum Beispiel Benutzerdaten oder ähnliches ab, um den Inhalt später wieder abfragen zu können.
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.