Android: faça login no site e preserve a sessão / cookie usando DefaultHttpClient

Passei por vários tutoriais e por este site, mas não consegui encontrar uma solução adequada. Por outro lado, já vi aplicativos acessando sites e solicitando mais informações, por isso tenho certeza de que há uma maneira de fazer isso funcionar, mas talvez minha abordagem esteja errada.

Aqui está o que estou tentando fazer: Quero entrar em um site que precise de autenticação do usuário e, em seguida, ler e analisar sites acessíveis apenas se o usuário estiver conectado. O problema: depois de POSTAR as credenciais no site, recebo um cookie que parece não ser preservado no meu HttpClient, mesmo que os documentos sugiram que exatamente isso deve acontecer.

Aqui está um pouco do meu código:

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();

Quando produzo o conteúdo de "cookies", tudo parece bem (recebo uma sessão):

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

Pelo que entendi, o cookie / sessão será preservado e usado no meu HttpClient, desde que não o feche.

Ao ler a próxima página (que é restrita), use este código:

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

Se eu emitir a resposta da solicitação GET (usandoresponse.getStatusLine()) Recebo uma mensagem "200 OK", mas a análise do site retornado mostra que o login foi perdido (só recupero um formulário de login).

Qualquer ajuda é apreciada.

questionAnswers(4)

yourAnswerToTheQuestion