Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
18
ZUGRIFFE
4212
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    hallo,
    ich versuche mich auf einer Website einzuloggen,
    und dann für den Nutzer informationen herunterladen.
    Die SessionID's werden in Cookies hinterlegt(beim Laden
    bzw Einloggen auf der Seite)
    Mein Login über HttpClient funktioniert jedoch nicht!

    Mein vorgehen,
    einen HttpClient anlegen,
    eine PostMethod (fürs Login erstellen)
    ein GetMethod erstellen, für den download.

    Ich habe die Cookies im HttpClient,
    mit denen beim manuellen Einloggen verglichen
    (habe dazu Firefox verwendet).
    Es sind alle Cookies vorhanden,
    jedoch bekomme ich nicht die Daten "für den eingeloggten Nutzer"

    hat jemand eine idee was ich falsch gemacht haben kann ?

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    
    HttpClient client = new HttpClient();
            client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            String temp;
     
    // Einfacher Aufbau einer Verbindung zur Website
            GetMethod getMethod1 = new GetMethod(siteURL);
            getMethod1.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            client.executeMethod(getMethod1);
            temp = getMethod1.getResponseBodyAsString();
            save(temp);
            insertCookiesToClient(client, temp);
            for (Cookie c : client.getState().getCookies()) {
                System.out.println("Cookie : " + c.getName() + " \t" + c.getValue() + " \t" + c.getDomain());
            }
            Thread.sleep(500);
            System.out.println("------------------------------");
     
    // Login auf der Website
            /*<form action="/login/login" method="post">
            email: <input id="user_email" name="user[email]" size="30" type="text" /><br/>
            password: <input id="user_password" name="user[password]" size="30" type="password" /><br/>
            <input name="commit" type="submit" value="Login" />
            </form>
             */
            PostMethod postMethod1 = new PostMethod("loginURL");
            postMethod1.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            postMethod1.addParameter("user[email]", "a@bc.de");
            postMethod1.addParameter("user[password]", "pw");
            postMethod1.addParameter("commit", "Login");
     
            client.executeMethod(postMethod1);
            temp = postMethod1.getResponseBodyAsString();
            save(temp);
            insertCookiesToClient(client, temp);
            for (Cookie c : client.getState().getCookies()) {
                System.out.println("Cookie : " + c.getName() + " \t" + c.getValue() + " \t" + c.getDomain());
            }
     
    // Download der Informationen
            Thread.sleep(500);
            System.out.println("------------------------------");
            GetMethod getMethod2 = new GetMethod(downloadURL);
            getMethod2.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            client.executeMethod(getMethod2);
            temp = getMethod2.getResponseBodyAsString();
            save(temp);
            insertCookiesToClient(client, temp);
            for (Cookie c : client.getState().getCookies()) {
                System.out.println("Cookie : " + c.getName() + " \t" + c.getValue() + " \t" + c.getDomain());
            }
     
    // LOGOUT
            Thread.sleep(500);
            System.out.println("------------------------------");
            GetMethod getMethod5 = new GetMethod(logoutURL);
            getMethod5.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            client.executeMethod(getMethod5);
            temp = getMethod5.getResponseBodyAsString();
            save(getMethod2.getResponseBodyAsString());
            for (Cookie c : client.getState().getCookies()) {
                System.out.println("Cookie : " + c.getName() + " \t" + c.getValue() + " \t" + c.getDomain());
            }

    nach dem ausführen bekomme ich das ..
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    Cookie : _session_id    85b9eda3d3f7cff5ae38b03b2b61c59a    info.side.com
    ------------------------------ 
    // Login
    Cookie : SITEm  a%40bc.de   .side.com
    Cookie : SITEp  d69b1760d4248fe1e5dc4ec7c6abf30f    .side.com
    Cookie : _session_id    85b9eda3d3f7cff5ae38b03b2b61c59a    info.side.com
    ------------------------------
    // Download
    Cookie : SITEm  a%40bc.de   .side.com
    Cookie : SITep  d69b1760d4248fe1e5dc4ec7c6abf30f    .side.com
    Cookie : _session_id    082bcbfd456b4b390a2671c8bc1d808e    info.side.com
    ------------------------------
    //Logout
    Cookie : SITEm  a%40bc.de   .side.com
    Cookie : SITEp  d69b1760d4248fe1e5dc4ec7c6abf30f    .side.com
    Cookie : _session_id    082bcbfd456b4b390a2671c8bc1d808e    info.side.com


    ich verzweifle, und bin über jede idee dankebar
    Geändert von drob (06.04.08 um 14:29 Uhr)
     

  2. #2
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    muss ich eine Methode explizit sagen, dass die Cookies
    im HttpClient verwendet werden sollen?

    eine Erkenntnis:
    ein wichtiges Cookie wird nicht "anerkannt"
    nach dem Login wird das Cookie "_session_id" nicht beibehalten
    bzw. nicht anerkannt, warum auch immer

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    //Simple Site conect
    Cookie : _session_id    85b9eda3d3f7cff5ae38b03b2b61c59a    info.side.com
    ------------------------------ 
    // Login
    Cookie : _session_id    85b9eda3d3f7cff5ae38b03b2b61c59a    info.side.com
    ------------------------------
    // Download
    Cookie : _session_id    082bcbfd456b4b390a2671c8bc1d808e    info.side.com
    ------------------------------
    //Logout
    Cookie : _session_id    082bcbfd456b4b390a2671c8bc1d808e    info.side.com
     

  3. #3
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    aber die Herangehensweise ist doch richtig ?
     

  4. #4
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    Ich habe ein Lösung gefunden, wenn auch nur aufgrund eines dummen/einfachen Zufalls


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
            HttpClient client = new HttpClient();
            
    // Einfacher Aufbau einer Verbindung zur Website
            GetMethod getMethod1 = new GetMethod(siteGetURL);
            client.executeMethod(getMethod1);
            save( getMethod1.getResponseBodyAsString());
            System.out.println("------------------------------");
     
    // Login auf der Website
            PostMethod postMethod1 = new PostMethod("loginURL");
            postMethod1.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            postMethod1.addParameter("user[email]", "a@bc.de");
            postMethod1.addParameter("user[password]", "pw");
            postMethod1.addParameter("commit", "Login");
     
            client.executeMethod(postMethod1);
            save(postMethod1.getResponseBodyAsString());
     
    // Download der Informationen
            GetMethod getMethod1 = new GetMethod(siteUserURL);
            client.executeMethod(getMethod1);
            save( getMethod1.getResponseBodyAsString());
            System.out.println("------------------------------");

    kurz, ich setzte meine getMethod einfach neu, und dann bekomme ich die user-spezifischen Daten

    Wenn es jemand mal brauchen sollte / bzw den gleichen Fehler machte wie ich
     

  5. #5
    HichamId HichamId ist offline Rookie
    Registriert seit
    Aug 2008
    Beiträge
    5
    Hallo drop!

    Wie bekommt man die Seite mit user-spezifischen Daten direkt ohne daß man sich manuelle Einloggen?

    Gruß
    HichamID
     

  6. #6
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    An der Anmeldung kommst du nicht vorbei(Wie auch sonst soll der Server wissen wer du bist?),
    Einmal eingeloggt, kannst aber mehrere Interaktionen als der angemelderte User tätigen
     

  7. #7
    HichamId HichamId ist offline Rookie
    Registriert seit
    Aug 2008
    Beiträge
    5
    Danke erstmal für den Antwort!
    Ich habe es wie folgt mit HttpClient probiert:
    HttpClient client =new HttpClient();
    GetMethod getMethod = new GetMethod("http://www.hotspot-zone.com/hsz/");
    client.executeMethod(getMethod);

    //Login
    PostMethod postMethod = new PostMethod("http://www.hotspot-zone.com/hsz/?status=login");
    postMethod.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY)
    postMethod.addParameter("user","usernamexxx");
    postMethod.addParameter("pass","passwordxxx");
    client.executeMethod(postMethod);

    // url von PostMethod holen:
    String url = postMethod.getURI().getEscapeURI();

    // die Seite Laden auf den Android-Browser
    WebView web = new WebView();
    web.loadUrl(url);
    this.setContentView(web);

    Die Seite wird schon aufgerufen, aber nicht mit user-spezifischen Daten.
    weißt vielleicht, woran es liegt?

    Danke für jede Hilfe im Voraus!
     

  8. #8
    drob drob ist offline Mitglied Bronze
    Registriert seit
    Mar 2007
    Beiträge
    47
    ein kleiner Auszug aus der Anmeldeseite:
    HTML-Code:
    <form style="margin-top: 0px;" action="http://www.hotspot-zone.com/hsz/user.php" method="post">
    <input type="hidden" name="PHPSESSID" value="qo07o75p92ntsekcsr6uhbn1a6" />Benutzername: <br />
    <input type="text" name="uname" size="12" value="" /><br />Passwort: <br />
    <input type="password" name="pass" size="12" /><br /><input type="hidden" name="xoops_redirect" value="/hsz/" />
    <input type="hidden" name="op" value="login" />
    <input type="submit" value="Login" /><br />
    </form>
    1. Das Loginformular wird an "http://www.hotspot-zone.com/hsz/user.php" gesendet!
    2. Es sollen möglichst alle Werte beim Login gesendet werden.
    3. Hier ein Auszug aus meinem Funktionierenden code:
    Code :
    1
    2
    3
    4
    5
    6
    
            client = new HttpClient();
            client.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
            PostMethod postMethod = new PostMethod("http:\\website.de");
            postMethod.addParameter("user[email]", "username");
            postMethod.addParameter("user[password]", "password");
            postMethod.addParameter("commit", "Login");

    evtl liegt es an der php-session?! (wer weiss)
    Geändert von drob (02.09.08 um 14:55 Uhr)
     

  9. #9
    Ralf121 Ralf121 ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Hallo, ich wollte dein Code ma ausprobieren, habe auch die http Client Biblothek eingebunden aber anscheinend sind GetMethod & PostMethod nicht dabei, da gibt er mir nämlich eine Fehlermeldung aus (”Cannot find symbol”).
    Wo kann ich diese Biblotheken finden? Durch Googlen hab ich nichts gefunden...
     

  10. #10
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.978
    Hi und Willkommen bei tutorials.de

    Kannst du mal deinen aktuellen Code zeigen?
    Bitte gleich in die passenden Coetags einfügen [java]...[/java].
    Geändert von sheel (19.09.11 um 20:35 Uhr) Grund: Tagfehler
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  11. #11
    Ralf121 Ralf121 ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    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
    
    import org.apache.http.client.*;
     
    public class  Main   {
     
            try
                    {
                            HttpClient client = new HttpClient();
     
                            GetMethod getMethod1 = new GetMethod("http://example.org/geheim.php");
                            client.executeMethod(getMethod1);
                            System.out.println("Aufruf ohne Login —————–");
                            System.out.println(getMethod1.getResponseBodyAsString());
                            System.out.println("———————————–");
     
                            PostMethod postMethod1 = new PostMethod("http://example.org/login.php");
                            postMethod1.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
                            postMethod1.addParameter("name", "stefan");
                            postMethod1.addParameter("pass", "geheim");
                            client.executeMethod(postMethod1);
                            System.out.println("Login —————————–");
                            System.out.println(postMethod1.getResponseBodyAsString());
                            System.out.println("———————————–");
     
                            client.executeMethod(getMethod1);
                            System.out.println("Aufruf nach Login —————–");
                            System.out.println(getMethod1.getResponseBodyAsString());
                            System.out.println("———————————–");
                    }
                    catch (Exception e)
                    {
                            e.printStackTrace();
                    }
            }
     
        }
    Bei CookiePolicy meckert er auch rum...
    Geändert von Ralf121 (19.09.11 um 18:34 Uhr)
     

  12. #12
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.978
    Was genau hast du da heruntergeladen?
    Hast du einen Link?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  13. #13
    Ralf121 Ralf121 ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    http://hc.apache.org/downloads.cgi

    HttpClient 4.1.2 (GA)
    Die source....
     

  14. #14
    SE Tutorials.de Gastzugang
    Wenn du dir die Source geladen hast musst du die Lib erstmal builden und zum CP hinzufügen bevor du sie nutzen kannst.
     

  15. #15
    Ralf121 Ralf121 ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Ach so...dann kann ich mir doch gleich die jar dateien laden oder nicht?
     

Ähnliche Themen

  1. Login via apache httpclient
    Von Orex im Forum Java
    Antworten: 1
    Letzter Beitrag: 09.09.10, 08:06
  2. Apache HttpClient - Cookie-Problem
    Von Julian-w im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.03.09, 14:00
  3. httpclient Jakarta Cookie zurücksenden
    Von Tangarama im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 10.11.08, 10:55
  4. Antworten: 1
    Letzter Beitrag: 04.04.08, 00:10
  5. Login Problem mit method=post
    Von Railer im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 23.06.04, 12:39