kostenloser Webspace werbefrei: lima-city


C# - Login mit Cookies per HTTP-POST versenden

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    mermadalis

    Kostenloser Webspace von mermadalis

    mermadalis hat kostenlosen Webspace.

    Hallo Limas,

    Ich schreibe gerade mit C# ein Programm, bei dem der Benutzer seine Zugangsdaten für einen passwortgeschützten Bereich auf der Website eingeben soll, das Programm soll diese Daten per HTTP-Post an den Webserver senden und den Benutzer auf der Site einloggen.
    Die Site, auf der ich mich einloggen möchte, verlangt allerdings Cookies und liefert mir so immer die Meldung, dass der Login nicht möglich ist, da die Cookies deaktiviert sind. Ich suche nun eine Möglichkeit, mit C# Cookies zu simulieren, sodass der Login möglich ist. Dabei soll HttpWebRequest verwendet werden.

    Hier mein aktuell genutzter Code:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Windows.Forms;
    
    [...]
    
    private string sendLoginData(string username, string password)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://example.org/loginscript");
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
    
                request.Method = "POST";
                string postData = "username=" + username + "&password=" + password;
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteArray.Length;
                Stream dataStream = request.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();
                WebResponse response = request.GetResponse();
                if ((((HttpWebResponse)response).StatusDescription) != "OK") return (((HttpWebResponse)response).StatusDescription);
                dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                reader.Close();
                dataStream.Close();
                response.Close();
    
                return responseFromServer;
            }
    
    [...]


    Ich dachte eigentlich, dass das ganze aufgrund des CookieContainers funktionieren müsste, es klappt aber nicht.
    Es ist vielleicht noch zu erwähnen, dass ich auf die Scripts, die auf dem Webserver liegen, keinen Einfluss habe, d.h. ich kann die Scripts auf dem Server nicht so umschreiben, dass keine Cookies verwendet werden.

    Wer kann mir helfen?

    MfG mermadalis
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Zunächst mal holst du dir die Cookies aus dem Postdata-Request, mit dem du im selben Schritt die Logindaten übermittelt hast.

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    string Text = ""; // Cookie-Ausgabe
    
    foreach (Cookie cook in response.Cookies)
    {
      Text += "COOKIE: " + cook.Name + " = " + cook.Value + "\r\n";
    }

    Achte dabei unbedingt darauf, dass du Automatische Weiterleitungen verhinderst ! Sonst wirst du mit einem
    header('Location: foo.bar');

    innerhalb des PHP-Codes sofort wieder um deine Results gebracht und bekommst einen überschrieben Content, der keine Cookies mehr enthält. Folgendermaßen:
    request.MaximumAutomaticRedirections = 1; // Falls eine Weiterleitung nötig ist
    request.AllowAutoRedirect = false; // Ansonsten nur das hier
    // Teste selbst, welches von beiden funktioniert.

    Jedem weiteren Request musst du dann das Cookie als Parameter hinzufügen, via
    request.CookieContainer = new CookieContainer();
    Cookie cookie = new Cookie("PHPSESSID", "Wert", "Relativer Pfad", "Domain");
    request.CookieContainer.Add(cookie);

    Damit sollte es funktionieren, dem WebBot steht also nichts mehr im Wege. :thumb: :tongue:

    Liebe Grüße
    - VampireSilence
  4. vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Lesen. Nachdenken. Posten.

    Ich werde bestimmt nichts hier rein schreiben, was nicht funktioniert :rolleyes: also is deine Frage schon beantwortet.

    Was die Cookies angeht:
    Du generierst ein neues Cookie mit den betreffenden Spezifikationen, fügst dies der Cookiesammlung hinzu und fertig. Was gibts daran nicht zu verstehen ?

    Liebe Grüße
    - VampireSilence
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!