tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
5867
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    awaiK Tutorials.de Gastzugang
    Hallo,
    ich hab Probleme einem HttpWebRequest ein zuvor empfangenes Cookie mitzugeben.Hoffe ihr könnt mir helfen.

    Ich benutze folgenden Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    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 :
    1
    2
    3
    4
    5
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    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 :
    1
    2
    3
    4
    
    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. #2
    Avatar von meste
    meste meste ist offline Mitglied Gold
    Registriert seit
    Dec 2003
    Beiträge
    173
    schau mal hier,

    vielleicht hilft dir das weiter
     
    Gottes Wort ist mein Schwert und sein Urteil wird meine Rache sein!

  3. #3
    Konstantin Denerz Tutorials.de Gastzugang
    Hi,

    also ich habe dein Beispiel ausprobiert und bei mir werden bei dem zweiten Request Cookies verschickt, die ich beim ersten Response erhalte.
    Bist du dir sicher, dass dein Logging richtig ist? Denn Content-Length ist bei dir unterschiedlich: Browser: 43, deine Anwendung: 187
    Weiß nicht welches Programm du zum Sniffen benutzt hast, aber ich verwende das hier: http://www.wireshark.org/

    Gruß Konstantin
     

Ähnliche Themen

  1. Problem mit Webrequest
    Von kerstel im Forum .NET Web und Kommunikation
    Antworten: 1
    Letzter Beitrag: 27.07.09, 20:09
  2. [VB.Net] WebRequest mit Cookie
    Von Thau im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 27.05.09, 09:36
  3. WebRequest - Login
    Von martinpriebe im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 14.03.08, 14:57
  4. Frage zu WebRequest
    Von andreas_gierisch im Forum .NET Web und Kommunikation
    Antworten: 8
    Letzter Beitrag: 13.07.07, 11:18
  5. C# Webrequest + Cookie via CookieCollection Emtpy Value Problem
    Von Devilzimti im Forum .NET Web und Kommunikation
    Antworten: 0
    Letzter Beitrag: 17.03.07, 17:02