WebRequest und HttpWebResponse



  • Guten Morgen liebe Gemeinde,

    ich möchte mich hiermit mit einem Problem an euch wenden, das mir schon seit Stunden kopfzerbrechen bereitet.

    Folgender Hintergrund:
    Ich erstelle eine WinApply unter C#.NET und möchte durch eine Form zu XING.com connecten, in dieser Form gibt man seinen Usernamen und sein Passwort ein, das dann per POST zu XING geschickt wird und das mir eine Response-Redirect bei erfolgreiche Anmeldung zurückgibt.

    Folgender Code ist zur Zeit aktuell:

    WebRequest requestFirst = HttpWebRequest.Create("http://www.xing.com/app/user");
    requestFirst.Headers.Add("Cookie", 
    "s_cc=true; s_nr=1239776793623; " +
    "s_lastvisit=1239776775521;  " +
    "s_sq=%5B%5BB%5D%5D; " +
    "s_vi=[CS]v1|49E57E0700001A8F-A2C0BBB00004174[CE]");
    
    requestFirst.Method = "POST";            
    
    String dataToPost = "op=login&dest=%2Fapp%2Fuser%3Fop%3Dhome&login_user_name=" + ConvertToPostData(username) + "&login_password=" + password;
    
    Byte[] byteArray = new ASCIIEncoding().GetBytes(dataToPost);
    
    ((HttpWebRequest)requestFirst).ProtocolVersion = HttpVersion.Version10;
    ((HttpWebRequest)requestFirst).ContentType = "application/x-www-form-urlencoded";
    
    ((HttpWebRequest)requestFirst).ContentLength = byteArray.Length;
    ((HttpWebRequest)requestFirst).Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    
    ((HttpWebRequest)requestFirst).AllowAutoRedirect = true;
    ((HttpWebRequest)requestFirst).UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)";
    
    ((HttpWebRequest)requestFirst).Referer = "http://www.xing.com/app/user";
    ((HttpWebRequest)requestFirst).KeepAlive = true;
    
    StreamWriter writerFirst = new StreamWriter(requestFirst.GetRequestStream());
    writerFirst.Write(dataToPost);
    writerFirst.Close();
    
    HttpWebResponse responseFirst = (HttpWebResponse)requestFirst.GetResponse();
    responseFirst.Cookies = new CookieCollection();
    responseFirst.Cookies.Add(new Cookie("Set-Cookie",""));
    
    Stream dataStreamFirst = responseFirst.GetResponseStream();
    String headerFirst = responseFirst.GetResponseHeader("Cookie");
    
    StreamReader readerFirst = new StreamReader(dataStreamFirst);
    String resultFirst = readerFirst.ReadToEnd();
    
    readerFirst.Close();
    dataStreamFirst.Close();
    responseFirst.Close();
    

    Wie ihr seht lege ich den Cookie Header für die aktuelle Session noch statisch fest, da der richtige von serverseitigen JavaScript Funktion NACH dem Seitenaufbau, wodurch er durch ein einfaches "ViewSourceCode" nicht zu ermitteln ist.

    Zurück bekomme ich vom StreamReader auch die erhoffte Seite, allerdings bin ich da nicht angemeldet, obwohl die Cookies,die PostData Elemente sowie der Stream zwischen Firefox/XING und WinApply/XING gleich sind.

    Kann es daran liegen das das WebResponse Objekt keine Set-Cookie Header übernimmt, die es vom XING zurück bekommt, weil sie bei ihm Read-Only sind?

    Danke für eure Hilfe,

    NozzNazz

    ---------------------------------------------------------

    Edit:

    Die Cookies, die ich statisch setze, werden von XING.com nicht erkannt.
    Hat jemand eine Idee wie ich serverseitige JavaScriptResults vom Browser auslesen kann um sie in meine Cookies zu speichern?! Denn der Browser schickt sie ja schlieslich bei Get und Post Anfrage auch jedesmal mit.



  • Das Stichwort heißt CookieContainer! Du musst über den WebResponse die Logindaten speichern.

    Siehe http://www.codeplanet.eu/tutorials/csharp/4-tcp-ip-socket-programmierung-in-csharp.html?start=5


Anmelden zum Antworten