[Java] Wie in Foren einloggen?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von DrBloomberg, 26. Juni 2009 .

Schlagworte:
  1. 26. Juni 2009
    Wie in Foren einloggen?

    Hy Leute,
    ich beschäftige mich seit knapp einem Jahr mit JAVA und würde gerne ein neues Projekt starten
    Ich bin auf ziemlich vielen Foren aktiv und habe mir gedacht, dass ich ein kleines Programm schreibe.

    Die GUI habe ich schon fertig, das Programm soll alle 5min überprüfen ob ich in den Foren Nachrichten bekommen habe.
    [URL des Forums mit Username und PW sind in einer .txt gespeichert]

    Sollte eine Nachricht vorhanden sein so will ich, dass ich in einem Textfeld in der GUI die Antwortauf die Nachricht eingebe und sie per Button abschicke.

    (Ja ich weiß, ich mach mir damit Umstände, aber ich will unbedingt wissen wie man sich in JAVA in Foren und anderen Webseiten einloggt UND eingeloggt bleibt)

    So weit so gut, ich hab ein wenig gegoggled und nicht wirklich informative Sachen gefunden.
    Eine Frage da bleibt noch offen:
    - Wie regle ich das mit den Cookies in Java (brauch ich micht überhaupt um die Cookies zu kümmern? Oder geht das auch ohne?)

    Es wäre toll wenn ihr ein gutes Tutorial kennen würdet, oder ein Codeschnipsel welches mir weiterhelfen würde

    Ich würde ja gerne meinen Programmierlehrer um Hilfe bitten, aber Schulschluss naht und es findet kein Unterrricht mehr statt :/

    Ich wäre euch echt dankbar, wenn mir jemand diesbezüglich helfen würde ^^,
     
  2. 26. Juni 2009
    AW: Wie in Foren einloggen?

    Ich kann zwar kein Java aber du musst eine HTTP Anfrage senden, bei der du deinen Cookie mitschikst. Ohne gehts nicht. Den kannst du einfach in den Header schreiben und auslesen einfach im browser wenn du auf der Seite eingeloggt bist (bei Opera geht das z.B. unter Seitenspezifische Einstellungen -> Cookies). Oft sind das mehrer aber meist brauchst du nur einen oder zwei (oft den username und das verschlüsselte Passwort). Diese sendest du dann mit und kannst ohne Probleme dein Postfach auslesen. Hier mal ein Code von Sun wie du HTTP daten sendest: Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle
     
  3. 26. Juni 2009
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Wie in Foren einloggen?

    Hallo, am besten du benutzt den HTTPClient von Apache (HttpClient - HttpClient Home).
    Das im Prinzip wie ein Browser. Du kannst Requests abschicken, Daten empfangen usw...
    Ich bin mir gerade nicht sicher ob die cookies standartmäßig gespeichert werden aber ich denke schon, wenn nicht kannst du das auch einstellen (in der API nachlesen).

    Zum abschicken von POST Parametern mit Hilfe des HTTPCLient (also wie in deinem Fall das Login Formular) findest du hier in einem älteren Beitrag.

    [Java] HTML Formular absenden - RR:Board

    Anschließend musst du die Seiten natürlich auch "parsen". Also systematisch über zum Beispiel Regular Expressions auf Seiteninhalte zugreifen (nämlich die Nachrichten in deinem Fall)

    Hab mal ein Regular Expression Tester geschrieben mit dem du herumspielen kannst. Java Regular Expression Tester :: Ein Karlsruher Bloggt!

    Also dein vorhaben ist schon etwas komplexer vielleicht beschäftigst du dich erstmal mit dem HTTPClient und versuchst anschließend etwas über Regular Expressions dir beizubringen.
     
  4. 26. Juni 2009
    AW: Wie in Foren einloggen?

    vllt hilft dir das hier auch weiter:

    [Java] POST-Daten an Internetseite schicken - ComputerBase Forum

    Such bei google einfach nach:
    "webseiten mit Post-daten aufrufen Java"
     
  5. 28. Juni 2009
    AW: Wie in Foren einloggen?

    Danke für eure Hilfen Hab den HTTPClient installiert Ist echt eine große Hilfe gewesen, ohne dem Client gänge es wohlmöglich nur sehr schwer

    Aber ich habs immer noch nicht
    Bin zwar dank euch weiter als vorher aber ich komme hier nicht mehr weiter (hier meine Methode)

    PHP:
    public  void login ()  throws MalformedURLException IOException
        
    {
            
        
    String seite  "www.mysite.de" ;

            
    HttpClient client  = new  HttpClient ();
            
    client . getHostConfiguration (). setHost ( seite 80 "http" );
            
    client . getParams (). setCookiePolicy ( CookiePolicy . BROWSER_COMPATIBILITY );
            
    client . getParams (). setParameter ( HttpMethodParams . USER_AGENT ,
            
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)" );
           

            
            
    PostMethod postMethod  = new  PostMethod ( "/login/check/" );
            
    postMethod . addParameter ( "redirect" "" );
            
    postMethod . addParameter ( "username" "Alfred" );
            
    postMethod . addParameter ( "password" "df9e3i" );
            
    postMethod . addParameter ( "login_site" "http://www.mysite.de/login/check/" );
            
    postMethod . addParameter ( "submitForm" "Login" );
            
            
    client . executeMethod ( postMethod );

            
            
    System . out . println ( postMethod . getResponseBodyAsString ());
            
        }
    Wenn man sich die Zeile
    PHP:
     PostMethod postMethod  = new  PostMethod ( "/login/check/" );
    anschaut dann stimmt die Zeile zwar 100% aber es liefert mir bei
    PHP:
    System . out . println ( postMethod . getResponseBodyAsString ());
    überhaupt keinen String, ich hab hintendran noch .length() eingefügt und der Wert ist 0

    Wenn ich
    PHP:
    PostMethod postMethod  = new  PostMethod ( "/login/check/" );
    zu
    PHP:
    PostMethod postMethod  = new  PostMethod ( "login/check/" );
    oder
    PHP:
    PostMethod postMethod  = new  PostMethod ( "/login/check" );
    verändere bekomme ich einen ResponseBodyAsString, darin steht zwar dass der Login nicht erfolgreich war, aber das liegt auch daran, dass es falsch was ich als PostMethod angegeben habe. Ich schließe daraus folgendes:

    Falsch eingeben: Fehler steht im ResponseBody (immerhin bekomme ich da einen ResponseBody )
    Richtig eingeben: ResponseBody ist völlig leer (Warum zur Hölle?) Hier müsste ich zumindest IRGENDWAS im Body stehen haben! :/

    Ich habs auch mit Wireshark versucht, ich habe den Code den der Browser generiert mit dem den ich generiere verglichen, hier die Ergebnisse:

    Originaler und funktionierender Browser Code:
    PHP:
    POST  / login / check HTTP / 1.1
    Host
    www . mysite . de
    User
    - Agent Mozilla / 5.0  ( Windows U Windows NT 5.1 de rv : 1.9.0.11 Gecko / 2009060215 Firefox / 3.0.11  (. NET CLR 3.5.30729 )
    Accept text / html , application / xhtml + xml , application / xml ; q = 0.9 ; q = 0.8
    Accept
    - Language de - de , de ; q = 0.8 , en - us ; q = 0.5 , en ; q = 0.3
    Accept
    - Encoding gzip , deflate
    Accept
    - Charset ISO - 8859 - 1 , utf - 8 ; q = 0.7 ,*; q = 0.7
    Keep
    - Alive 300
    Connection
    keep - alive
    Referer
    http : //www.mysite.de/login/
    Cookie __gads = ID = 9c5ef30bb01ac199 : T = 1245452600 : S = ALNI_Mbdu9Xc4w1m - vUa8uy7wRCJiUXiug __utmz = 148535734.1244629269.192.13 . utmcsr = mysite . de | utmccn =( referral )| utmcmd = referral | utmcct =/ mysite / range /;  __utma = 148535734.80156725.1238966045.1246191599.1246198260.336 __utmc = 148535734 __uvpg = 1246144144.29 __uvpgp = 1246144144.29 sessionid = 7fba8e02328173d01e03d95816fe2e59 __utmb = 148535734.3.10.1246198260
    Content
    - Type application / x - www - form - urlencoded
    Content
    - Length 131

    redirect
    =& username = Alfred & password = df9e3i & login_city = http % 3A % 2F % 2Fwww . mysite . de % 2Flogin % 2Fcheck % 2F & submitForm = LoginHTTP / 1.1 302 FOUND
    Date
    Sun 28 Jun 2009 14 : 13 : 30 GMT
    Server
    Apache / 2.2.9  ( Fedora )
    Vary Cookie
    Location
    http : //www.mysite.de/menue/?nologout
    Set - Cookie :   sessionid = 7fba8e02328173d01e03d95816fe2e59 Domain =. mysite . de expires = Sun 28 - Jun - 2009 20 : 13 : 30 GMT Max - Age = 21600 Path =/
    Content - Length 0
    Connection
    close
    Content
    - Type text / html charset = utf - 8
    Mein Code:
    PHP:


    POST 
    / login / check HTTP / 1.1
    User
    - Agent Mozilla / 5.0  ( Windows U Windows NT 5.1 de rv : 1.9.0.11 Gecko / 2009060215 Firefox / 3.0.11  (. NET CLR 3.5.30729 )
    Host www . mysite . de
    Content
    - Length 131
    Content
    - Type application / x - www - form - urlencoded


    redirect
    =& username = Alfred & password = df9e3i & login_city = http % 3A % 2F % 2Fwww . mysite . de % 2Flogin % 2Fcheck % 2F & submitForm = LoginHTTP / 1.1 302 FOUND
    Date
    Sun 28 Jun 2009 14 : 25 : 28 GMT
    Server
    Apache / 2.2.9  ( Fedora )
    Vary Cookie
    Location
    http : //www.mysite.de/menue/?nologout
    Set - Cookie :   sessionid = a620b5ce2c82f576e597c8669b28fee3 Domain =. mysite . de expires = Sun 28 - Jun - 2009 20 : 25 : 28 GMT Max - Age = 21600 Path =/
    Set - Cookie :   __uvpg = 1246199128.42 Domain =. mysite . de expires = Mon 29 - Jun - 2009 14 : 25 : 28 GMT Max - Age = 86400 Path =/
    Set - Cookie :   __uvpgp = 1246199128.42 Domain =. mysite . de expires = Mon 29 - Jun - 2009 14 : 25 : 28 GMT Max - Age = 86400 Path =/
    Content - Length 0
    Connection
    close
    Content
    - Type text / html charset = utf - 8

    Wie man sieht wir bei meiner POST-Request kein Cookie mitgesendet, möglicherweise liegt es daran. Ich habe jedoch gelesen, dass der Apache HTTPClient die Cookies automatisch, spricht selber behandelt, von daher habe ich mir darum keine Gedanken gemacht.
     
  6. 28. Juni 2009
    AW: Wie in Foren einloggen?

    Probiers mal so:

    PHP:
            StringBuffer inputString  = new  StringBuffer ();
            
    String line  = new  String ();

            
    BufferedReader bufferedReader  = new  BufferedReader (new  InputStreamReader ( method . getResponseBodyAsStream ()));
                        while ((
    line  bufferedReader . readLine ()) !=  null ) {
                            
    inputString . append ( line );
                        }

    System . out . println ( inputString . toString ());
    anstatt

    PHP:
           System . out . println ( postMethod . getResponseBodyAsString ());
     
  7. 28. Juni 2009
    AW: Wie in Foren einloggen?


    Hat rein gar nichts daran geändert Wenn ich den Pfad immernoch falsch eingebe bekomme ich einen Quelltext, und richtig bekomme ich keinen.

    Ich vermute, dass etwas mit dem Cookie nicht stimmt, es wird laut Wireshark nichts mitgeliefert, also es wird gar kein Cookie gesetzt.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.