tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1212
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Maatze123 Maatze123 ist offline Grünschnabel
    Registriert seit
    Jan 2009
    Beiträge
    3
    Hallo Leute,

    wir haben zur Zeit ein ziemlich großes Problem. Zuerst muss ich anmerken das wir noch ziemliche Anfänger auf dem
    C#-Gebiet sind. Wir versuchen in unserem Projekt auf den Inhalt einer WebSeite zuzugreifen. Dazu müssen wir uns zuerst
    automatisch bei der Website einloggen, um dann auf die entsprechende Seite zu gelangen.

    Als Beispiel dafür könnte man den Zugriff auf einen speziellen Thread in einem Forum nehmen, der nur für eingeloggte User
    sichtbar ist. Man muss sich zuerst einloggen um die Seite überhaupt eingezeigt zu bekommen. Das wollen wir nun in unserem
    Programm machen.

    Unsere erste Idee war es den Zugriff über ein Cookie zu machen, allerdings verliefen unsere Bemühungen in diesem
    Bereich im Sande. Nun haben wir ein Programm erstellt das per WebRequest auf die Website zugreift und lesen damit den
    Quellcode der Seite aus. Über PreAuthenticate + NetworkCredentials sollten dem Server Username und Password übergeben
    werden.

    Das Programm lässt sich nun ohne Fehler ausführen, jedoch gelingt uns das einloggen nicht und wir
    bekommen nur den Quellcode der Seite auf die wir weitergeleitet werden (als ob wir nicht eingeloggt wären -->Logout Seite).
    Der Server reagiert also praktisch überhaupt nicht auf unseren Login-Versuch.

    Hier unser bisheriger 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
    31
    32
    33
    34
    
            public static void Main()
            {
                //Webrequest wird gestartet
                WebRequest request = WebRequest.Create("http://www.zmp.de/login/default.asp"); //Default-Loginseite
            //"http://www.zmp.de/milchvbereich/wk.asp" = die Unterseite auf die wir eigentlich zugreifen wollen
     
                //Sendet die Credentials ohne Aufforderung des Servers
                request.PreAuthenticate = true; 
     
                //Username und Passwort werden definiert
                string strUserName = "****"; 
                string strPassword = "****";
     
                //Network.Credentials werden übergeben
                NetworkCredential networkCredential = new NetworkCredential(strUserName, strPassword);
                request.Credentials = networkCredential;
                WebResponse response = request.GetResponse();
                
                //DataStream wird geöffnet
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                string responseFromServer = reader.ReadToEnd();
                Console.WriteLine(responseFromServer);
     
                //Schreibt Antwort in TXT-Datei
                StreamWriter WStream = new StreamWriter("test.txt");
                WStream.Write(responseFromServer);
     
                WStream.Close();
                reader.Close();
                dataStream.Close();
                response.Close();
                Console.ReadLine();
            }

    Mittlerweile haben wir auch noch eine zweite Methode gefunden, die allerdings genau das selbe Ergebnis liefert wie die Vorherige. Hier der Neue:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    class Programm
        {
            private static HttpWebRequest request;
            private static HttpWebResponse response;
            public static void Main()
            {
     
                string requestUrl = "http://www.zmp.de/login/default.asp";
                //Diese Parameter werden per Post Methode übergeben
                string requestParameter = "UserID=****&Password=****&Ziel=&Url=&Lizenz=&Titel=&Login=Login&Anmelden=Hier einloggen";
     
                request = (HttpWebRequest)WebRequest.Create(requestUrl);
     
                #region Schreib Werte in den RequestStream der an die URL geschickt wird
                byte[] parameter = Encoding.UTF8.GetBytes(requestParameter);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = parameter.Length;
     
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(parameter, 0, parameter.Length);
                requestStream.Close();
     
                #endregion
     
                //Holt sich die Antwort
                response = (HttpWebResponse)request.GetResponse();
     
                #region Liest die Antwort (ResponseStream) und gibt sie auf der Console aus
                Stream responseStream = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream);
                string Ausgabe = streamReader.ReadToEnd();
                Console.WriteLine(streamReader.ReadToEnd());
     
                StreamWriter WStream = new StreamWriter("test.html");
                WStream.Write(Ausgabe);
     
                streamReader.Close();
                responseStream.Close();
                WStream.Close();
                #endregion
     
            }
        }

    Für schnelle Hilfe wären wir sehr dankbar, da wir unter starkem Zeitdruck stehen.

    Liebe Grüße,
    Maatze
     

  2. #2
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    Hab euren Code jetzt nicht zur gänze gelesen, aber wegen der Variante mit dem Cookie. Wie habt ihr es denn gemacht?

    Wenn die betroffene Seite den Auth-Mechanismus über Cookies regelt, sollte folgender Ablauf klappen:
    • CookieContainer erstellen, welcher für jeden Request wiederverwendet wird
    • Login-Formular mit den notwendigen Formulardaten aufrufen
    • Die eigentlich gewollte Seite aufrufen

    Sprich: Loggt euch auf der Seite ein, dann habt ihr die nötigen Daten im CookieContainer, und da ihr diesen bei jeden weiteren Aufruf wiederverwendet, seid ihr auch immer eingeloggt.

    lg,..
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  3. #3
    Maatze123 Maatze123 ist offline Grünschnabel
    Registriert seit
    Jan 2009
    Beiträge
    3
    Hey,

    danke schonmal für die schnelle Antwort. Habe jetzt schnell unseren Code mit Cookie-Einsatz herausgekramt. Mit diesem Code bekommen wir allerdings immer einen Internen Serverfehler (500).

    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
    31
    32
    
    public static void Main()
            {
                // Cookie wird benötigt um die session von PHP aufrecht zu erhalten
                CookieContainer cookieContainer = new CookieContainer();
                string html;
                string loginData = "UserID=****&Password=****&Ziel=&Url=&Lizenz=&Titel=&Login=Login&Anmelden=Hier einloggen";
     
                // First hit the login page
                HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.zmp.de/login/default.asp");
                req.CookieContainer = cookieContainer;
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(loginData);
                req.ContentLength = loginDataBytes.Length;
                Stream stream = req.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
     
                // Packe den Content der Seite die hinter der Authenifizierung liegt
                req = (HttpWebRequest)HttpWebRequest.Create("http://www.zmp.de/milchvbereich/getpage_kopf_fuss.asp?Aufruf=l&Ziel=europapreise/grossbritannien.asp");
                req.CookieContainer = cookieContainer;
                req.Method = "GET";
                res = (HttpWebResponse)req.GetResponse();
                StreamReader sr = new StreamReader(res.GetResponseStream());
                html = sr.ReadToEnd();
     
                //this.webBrowser1.DocumentText = html;
               // webBrowser1.Document.Body.InnerHtml = html;
     
            }

    LG
    Maatze
     

  4. #4
    Maatze123 Maatze123 ist offline Grünschnabel
    Registriert seit
    Jan 2009
    Beiträge
    3
    Hallo nochmal!

    Niemand Ahnung oder nen Tip dazu wo der Fehler im Code liegen könnte?

    Liebe Grüße,
    Maatze
     

Ähnliche Themen

  1. JAVA HTTP multipart Post funktioniert nicht
    Von kriizz im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 23.04.10, 16:53
  2. [VB.Net] WebRequest mit Cookie
    Von Thau im Forum .NET Web und Kommunikation
    Antworten: 4
    Letzter Beitrag: 27.05.09, 09:36
  3. HTTP-Dateiupload funktioniert nicht
    Von javaprogger1987 im Forum Java
    Antworten: 0
    Letzter Beitrag: 25.03.07, 12:17
  4. getURL("http://abc.de" "_blank"); - funktioniert nicht mehr
    Von ali-gator im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 04.05.06, 10:31
  5. Antworten: 7
    Letzter Beitrag: 10.07.03, 14:49