Ich habe durch verschiedene Tutorials und diese Website, konnte aber keine richtige Lösung finden. Auf der anderen Seite habe ich gesehen, wie sich Apps in Websites einloggt und weitere Informationen anfordert. Ich bin mir sicher, dass es einen Weg gibt, das zum Laufen zu bringen, aber vielleicht ist meine Vorgehensweise falsch.Android: Einloggen in die Website und Bewahren Session/Cookie mit DefaultHttpClient
Hier ist, was ich versuche: Ich möchte auf einer Website anmelden, die Benutzerauthentifizierung benötigt und dann lesen und analysieren Websites, die nur zugänglich sind, wenn der Benutzer angemeldet ist. Das Problem: nach dem Anmeldeschluss an Auf der Website erhalte ich einen Cookie, der in meinem HttpClient nicht erhalten zu sein scheint, obwohl die Dokumente vermuten lassen, dass genau das passieren soll.
Hier einige meiner Code:
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 Ausgang der Inhalt von "Cookies", alles in Ordnung scheint (I erhalten eine Sitzung):
- [version: 0][name: ASP.NET_SessionId][value: xxx][domain: xxx][path: /][expiry: null]
Wie ich verstanden, Der Cookie/die Sitzung wird beibehalten und in meinem HttpClient verwendet, solange ich ihn nicht schließe.
Wenn die nächste Seite zu lesen (das beschränkt ist), diesen Code verwenden:
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 Ausgabe der Antwort des GET-Request (mit response.getStatusLine()
) ich eine "200 OK" Nachricht erhalten, aber Parsing der Website, die zurückgegeben wird, zeigt, dass die Anmeldung verloren ist (ich nur ein Login-Formular abrufen).
Jede Hilfe wird geschätzt.
'httpclient' ist das gleiche für alle Anforderungen und die URLs sind beide auf der gleichen Domain (beide ohne SSL). Ich werde versuchen, Wireshark herauszufinden, was gesendet wird, danke für den Hinweis. – Select0r
Ich habe es ausprobiert: der Cookie ist an die zweite (GET) Anfrage angehängt und ich erhalte eine "302 Found" -Meldung, die den Login-Bildschirm anzeigt. – Select0r
@ Select0r: klingt wie etwas anderes ist dann falsch mit dieser zweiten Anfrage (z. B. Server erwartet eine 'Referer:' Header). – CommonsWare