httpclient method cookie - login bereitet fehler

drob

Mitglied
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:
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:
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
 
Zuletzt bearbeitet:
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:
//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
 
Ich habe ein Lösung gefunden, wenn auch nur aufgrund eines dummen/einfachen Zufalls


Code:
        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
 
Hallo drop!

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

Gruß
HichamID
 
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
 
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!
 
ein kleiner Auszug aus der Anmeldeseite:
HTML:
<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:
        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)
 
Zuletzt bearbeitet:
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...
 
Hi und Willkommen bei tutorials.de :)

Kannst du mal deinen aktuellen Code zeigen?
Bitte gleich in die passenden Coetags einfügen [code=java]...[/code].
 
Zuletzt bearbeitet:
Zurück