Android: Melden Sie sich bei der Website an und bewahren Sie die Sitzung / das Cookie mit DefaultHttpClient @ au

Ich habe verschiedene Tutorials und diese Website durchlaufen, konnte aber keine richtige Lösung finden. Auf der anderen Seite haben sich Apps auf Websites angemeldet und weitere Informationen angefordert. Ich bin mir sicher, dass es eine Möglichkeit gibt, dies zum Laufen zu bringen, aber vielleicht ist mein Ansatz völlig falsch.

Folgendes versuche ich zu tun: Ich möchte mich bei einer Website anmelden, für die eine Benutzerauthentifizierung erforderlich ist, und dann Websites lesen und analysieren, auf die nur zugegriffen werden kann, wenn der Benutzer angemeldet ist Sie erhalten ein Cookie, das in meinem HttpClient nicht gespeichert zu sein scheint, obwohl die Dokumentation vorschlägt, dass genau das passieren sollte.

Hier ist ein Teil meines Codes:

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(LOGIN_URL);

List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair(USER_FIELD, login));
nvps.add(new BasicNameValuePair(PASS_FIELD, pw));
nvps.add(new BasicNameValuePair(REMEMBERME, "on"));

httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

HttpResponse response = httpclient.execute(httpost);
HttpEntity entity = response.getEntity();

if (entity != null) {
  entity.consumeContent();
}

List<Cookie> cookies = httpclient.getCookieStore().getCookies();

Wenn ich den Inhalt von "Cookies" ausgebe, scheint alles in Ordnung zu sein (ich erhalte eine Sitzung):

- [version: 0][name: ASP.NET_SessionId][value: xxx][domain: xxx][path: /][expiry: null]

Wie ich verstanden habe, wird das Cookie / die Sitzung in meinem HttpClient gespeichert und verwendet, solange ich es nicht schließe.

Wenn Sie die nächste (eingeschränkte) Seite lesen, verwenden Sie diesen Code:

HttpGet httpget2 = new HttpGet(RESTRICTED_URL);
response = httpclient.execute(httpget2);
entity = response.getEntity();
InputStream data = entity.getContent();
// data will be parsed here
if (entity != null) {
    entity.consumeContent();
}
// connection will be closed afterwards

Wenn ich die Antwort der GET-Anfrage ausgebe (mitresponse.getStatusLine()) Ich erhalte die Meldung "200 OK", aber beim Analysieren der zurückgegebenen Site wird angezeigt, dass die Anmeldung verloren gegangen ist (ich rufe nur ein Anmeldeformular ab).

Jede Hilfe wird gebeten.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage