Pisze aplikację na androida do obsługi prywatnego portalu.
Postawiona strona jest jednak nieco wymagająca względem logowania i nie mogę sobie poradzić z plikami cookies.
Opis problemu logowania:
- Trzeba metodą GET pobrać zawartość pierwszej strony, zapisać z niej cookies i z zawartości strony wyciągnąć dane potrzebne do dalszej części. - to działa
- Metodą POST pobieramy zawartość drugiej strony podstawiamy pod to pliki cookies i dane POST z pierwszej strony. Podczas tego strona przekierowując nas automatycznie na kolejną podstronę podaje nowe cookies które trzeba zapisać.
- Metodą GET pobrać zawartość trzeciej strony na której mamy finalne cookies służące do końcowej pracy.
Prosił bym o pomoc w naprawieniu problemu: w punkcie 2 ponieważ nie wiem czy:
- Używam odpowiednich deklaracji dla cookies.
- Potrzebuję aktywować funkcję "allow redirect" dla metody POST.
- Czy dobrze stworzyłem funkcję pobierania kodu strony dla metody PostpageLogin.
Chciałem to zrobić w ten sposób ale coś jest nie tak podczas logowania na drugiej stronie.
List<Cookie> cookies;
protected String Getpage (String url) {
StringBuilder Source = new StringBuilder(100000);
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
client.setCookieStore((CookieStore) cookies);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String x = "";
while ((x = buffer.readLine()) != null) {
Source.append(x);
}
cookies = client.getCookieStore().getCookies();
} catch (Exception e) {
e.printStackTrace();
}
return Source.toString();
}
protected String PostpageLogin (String url, String PPA) {
StringBuilder Source = new StringBuilder(100000);
DefaultHttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
client.setCookieStore((CookieStore) cookies);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(6);
nameValuePairs.add(new BasicNameValuePair("TokenPPA", PPA)); // token do weryfikacji poprawności logowania, Druga część jest w cookies
nameValuePairs.add(new BasicNameValuePair("ReturnUrl", "/user/profile/login.php")); // Przskok na stronę profilu
nameValuePairs.add(new BasicNameValuePair("Login", login)); // Login do serwisu
nameValuePairs.add(new BasicNameValuePair("Password", haslo)); // hasło do serwisu
nameValuePairs.add(new BasicNameValuePair("Grm", "true")); //Wartość stała
nameValuePairs.add(new BasicNameValuePair("rememberLogin", "false")); // Wartość Stała
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse execute = client.execute(httppost);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String x = "";
while ((x = buffer.readLine()) != null) {
Source.append(x);
}
cookies = client.getCookieStore().getCookies();
} catch (Exception e) {
e.printStackTrace();
}
return Source.toString();
}