.NET - Webseite mit Cookies öffnen

  • VB

  • Jannik
  • 2375 Aufrufe 3 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .NET - Webseite mit Cookies öffnen

    Hey Leute,

    ich habe folgendes Problem:

    Undzwar:

    Ich möchte eine Seite laden, ein Art C0mmunity. Dazu möchte ich nicht den WebBrowser benutzen, er hat nicht die Vorraussetzungen, die ich für mein Projekt benötige.

    Wie folgt sieht das bei mir aus:
    httpRequest = HttpWebRequest.Create("http://www.xxx.eu/messages/show/")
    httpResponse = httpRequest.GetResponse()
    reader = New StreamReader(httpResponse.GetResponseStream)
    httpContent = reader.ReadToEnd


    Das laden der Seite klappt auch wunderbar, nur ein riesen Problem besteht: Ich bin nicht eingeloggt. Ich habe mich vorher im IE bzw FireFox eingeloggt, nur mein Programm bleibt ausgeloggt.

    Wie krieg ich das nun hin, das mein Programm auch eingeloggt ist? Kann ich irgendwie die auf dem PC gespeicherten Cookies oder wie die heißen (kenn mich damit speziell nicht aus) aus dem Internet Explorer bzw FireFox mitbenutzen, damit das klappt? :)

    Wäre echt dankbar, :)

    Jannik93
  • Ich denke an den Cookies liegt es nicht.
    Aus meiner Sicht wird die Anmeldung per "Post" Request gemacht. Der Kontext bleibt dann über die Lebenszeit der Browsersession vorhanden (sofern man sich nicht abmeldet...).
    Darum kannst Du die Anmeldung aus Browser A nicht in Browse B übernehmen. Manche Server werten auch noch die anderen Metadaten aus (z.B. Browsername, OS, ...). Dann ist man auch nicht erfolgreich, wenn man es schafft den Kontext umzuziehen.
    Der beste Weg dürfte sein die Anmeldung selbst zu machen. Dazu gibt es im Netz einige Beispiele. Eins davon habe ich mal angehängt:

    Quellcode

    1. private void button4_Click(object sender, EventArgs e)
    2. {
    3. // cookieContainer is used to store the cookies used by the login
    4. CookieContainer cookieContainer = new CookieContainer();
    5. string html;
    6. string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";
    7. // First hit the login page
    8. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.peterPan.de/index.php?do=login");
    9. req.CookieContainer = cookieContainer;
    10. req.Method = "POST";
    11. req.ContentType = "application/x-www-form-urlencoded";
    12. ASCIIEncoding encoding = new ASCIIEncoding();
    13. byte[] loginDataBytes = encoding.GetBytes(loginData);
    14. req.ContentLength = loginDataBytes.Length;
    15. Stream stream = req.GetRequestStream();
    16. stream.Write(loginDataBytes, 0, loginDataBytes.Length);
    17. stream.Close();
    18. HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    19. // Then grab the content of the desired page
    20. req = (HttpWebRequest)HttpWebRequest.Create("http://www.peterPan.de/index.php?do=meeting&pos=666");
    21. req.CookieContainer = cookieContainer;
    22. req.Method = "GET";
    23. res = (HttpWebResponse)req.GetResponse();
    24. StreamReader sr = new StreamReader(res.GetResponseStream());
    25. html = sr.ReadToEnd();
    26. webBrowser1.Document.Body.InnerHtml = html;
    27. }
    Alles anzeigen



    Wichtig ist erst mal folgende Zeile:
    string loginData = "ownnickname=***&ownpassword=***&submit=Anmelden";
    Das sind die Daten zum POST-Request basierend auf dem Formular der Anmeldeseite.
    Um an die Namen der Felder im Formular zu kommen, musst Du Dir die Webseite mal anschauen.
    Du kannst auch das PlugIn "Liveheaders" addons.mozilla.org/en-US/firefox/addon/3829 für den Firefox nehmen. Damit lässt sich ein bisschen hinter die Kulissen schauen.
    Es ist besser zu schweigen und für einen Narren gehalten zu werden, als zu reden und damit alle Zweifel zu beseitigen ...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Broken Sword ()

  • ' cookieContainer is used to store the cookies used by the login
    Dim cookieContainer As New CookieContainer()
    Dim html As String
    Dim loginData As String = "nick=peter&password=pan&x=66&y=6"

    ' First hit the login page
    Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create("http://www.peterpan.eu/start/show/"), HttpWebRequest)
    req.CookieContainer = cookieContainer
    req.Method = "POST"
    req.ContentType = "application/x-www-form-urlencoded"
    Dim encoding As New ASCIIEncoding()
    Dim loginDataBytes As Byte() = encoding.GetBytes(loginData)
    req.ContentLength = loginDataBytes.Length
    Dim stream As Stream = req.GetRequestStream()
    stream.Write(loginDataBytes, 0, loginDataBytes.Length)
    stream.Close()
    Dim res As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)

    ' Then grab the content of the desired page
    req = DirectCast(HttpWebRequest.Create("http://www.peterpan..eu/messages/show/"), HttpWebRequest)
    req.CookieContainer = cookieContainer
    req.Method = "GET"
    res = DirectCast(req.GetResponse(), HttpWebResponse)
    Dim sr As New StreamReader(res.GetResponseStream())
    html = sr.ReadToEnd()


    Habe nun mittels HTTPHeaders LoginData und ContentType überarbeitet, es klappt trotzdem nicht :(

    Hab ich irgendetwas übersehen? :(

    Edit:\\

    Bei der LoginData ändert sich ständig "x=xx" und "y=x", woran liegt das?

    Edit 2:\\

    Hat sich erledigt, klappt wunderbar :)

    Danke vielmals :)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Broken Sword () aus folgendem Grund: Glaube zawr nicht, dass das deine Daten waren, aber trotzdem mal geändert