HttpWebRequest - Cookies speichern und wieder übergeben?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Michael.

    HttpWebRequest - Cookies speichern und wieder übergeben?

    Hey, könntet ihr mir eine Anleitung für das empfangen der Cookies bei einem WebRequest und das Übergeben bei einem neuen Request geben?
    Ich hab schon mehrere Versuche hinter mir, alle ohne Erfolg - Die Cookies werden anscheinend einfach nicht übergeben - Bei dem 2. Request bin ich dann einfach nicht eingeloggt.
    Deklarier

    VB.NET-Quellcode

    1. Public KrumelMonster As New CookieContainer

    Global und mach deine ersten Request....zb GET:

    VB.NET-Quellcode

    1. request1.CookieContainer = KrumelMonster


    danach einfach beim 2ten Request mit POST:

    VB.NET-Quellcode

    1. request2.CookieContainer = KrumelMonster


    Müsste eigentlich funktionieren

    MFG
    GOOGLE ist mein Meister :)

    Michael schrieb:

    Hey, könntet ihr mir eine Anleitung für das empfangen der Cookies bei einem WebRequest und das Übergeben bei einem neuen Request geben?

    Eds gibt keine Anleitung , bzw. sie ist sehr simpel:
    - der httWebRequest speichert die empfangenen Cookies immer selbständig in der Property Cookies: sieh zu dass Du beim Versenden immer den gleichen CookieContainer benutzt

    Genauso könnte Dein Problem sein, dass Du versuchst Dich gleich beim ersten Aufruf mit einem POST einzuloggen: meist musst Du erst einen (GET)-Aufruf auf die Homepage machen um einen Session-Cookie zu empfangen, um daraufhin einen Login zu versuchen.

    Poste mal Deinen bisherigen Code ...
    Hey,

    wenn sich dein Problem auf nur eine Website bezieht(wovon ich ausgehe, weil Du sonst nicht ein und denselben Cookiecontainer nutzen möchtest), kannst du Dir doch auch eine Funktion schreiben,
    die ein und denselben Cookiecontainer benutzt.

    VB.NET-Quellcode

    1. Private Function Req(Byval Site As String , Byval Post as string , byval Met As String) As String
    2. Httpwebrequest
    3. Cookiecontainer,
    4. allowautoredirect etc etc..
    5. If Met = "POST" then
    6. streamwriter erstellen
    7. streamwriter schreibt post
    8. streamwriter schliessen
    9. End If
    10. Streamreader erstellen
    11. Stringvariable die mit treamreader.readtoend gefüllt wird
    12. Streamreader schliessen
    13. Return String
    14. End Function


    So kannst du verschiedene Urls, mit wiederum verschiedenen Posts übergeben , oder alternativ nur eine Url , Post ""
    und Met auf "GET" um etwas einfach nur zu downloaden.

    Michael schrieb:

    Ich hab nun mal den Code bei einer anderen Seite versucht, da klappts ohne Probleme.

    Jede Webseite ist mit ihren Checks unterschiedlich: manche prüfen beim Login nix ab, öfter wird ein Session-Cookie geprüft, widerum andere sind noch penibler und prüfen Referer und andere http-header

    Beginnen sollte man jedenfalls immer mit einem GET-Request auf die Login-Seite um ein evtl vorhandenes Session-Cookie einzusammeln, gefolgt von einem POST-Request für den Login (mit dem gleichen Cookie-Container).

    Wenns dann immer noch nicht geht, nimmt man einen Sniffer wie Wireshark oder das Firefox-Plugin Live Headers um die Feinheiten nachzubilden.

    Ansonsten ist mir C# oder VB egal ( lesen kann ichs wie die meisten hier), für genauere Hilfe wäre auch Deine Url hilfreich
    @Kevin: Genau so mach ich es ja - Ich poste einfach mal den C# Code:

    VB.NET-Quellcode

    1. public string createPostRequest(string address, string post, ref CookieContainer cookies)
    2. {
    3. HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(address);
    4. HttpWebResponse response = null;
    5. byte[] postBytes = Encoding.UTF8.GetBytes(post);
    6. Stream dataStream = null;
    7. StreamReader reader = null;
    8. string responseSource = null;
    9. request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0";
    10. request.Referer = "*/login.php";
    11. request.Method = "POST";
    12. request.ContentType = "application/x-www-form-urlencoded";
    13. request.ContentLength = postBytes.Length;
    14. request.CookieContainer = new CookieContainer();
    15. dataStream = request.GetRequestStream();
    16. dataStream.Write(postBytes, 0, postBytes.Length);
    17. dataStream.Close();
    18. response = (HttpWebResponse) request.GetResponse();
    19. dataStream = response.GetResponseStream();
    20. reader = new StreamReader(dataStream);
    21. responseSource = reader.ReadToEnd();
    22. cookies = request.CookieContainer;
    23. return responseSource;
    24. }
    25. public string createPostCookieRequest(string address, string post, CookieContainer cookies)
    26. {
    27. HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(address);
    28. HttpWebResponse response = null;
    29. byte[] postBytes = Encoding.UTF8.GetBytes(post);
    30. Stream dataStream = null;
    31. StreamReader reader = null;
    32. string responseSource = null;
    33. request.UserAgent = "eliteRequest";
    34. request.Method = "POST";
    35. request.ContentType = "application/x-www-form-urlencoded";
    36. request.CookieContainer = cookies;
    37. dataStream = request.GetRequestStream();
    38. dataStream.Write(postBytes, 0, postBytes.Length);
    39. dataStream.Close();
    40. response = (HttpWebResponse) request.GetResponse();
    41. dataStream = response.GetResponseStream();
    42. reader = new StreamReader(dataStream);
    43. responseSource = reader.ReadToEnd();
    44. return responseSource;
    45. }