He pasado por diferentes tutoriales y este sitio web, pero no he podido encontrar una solución adecuada. Por otro lado, he visto aplicaciones que inician sesión en sitios web y solicitan más información, por lo que estoy seguro de que hay una forma de que funcione, pero tal vez mi enfoque sea incorrecto.Android: inicie sesión en el sitio web y guarde la sesión/cookie utilizando DefaultHttpClient
Aquí es lo que estoy tratando de hacer:. Quiero iniciar sesión en un sitio web que necesita la autenticación de usuarios y luego leer y analizar los sitios web que sólo son accesibles si el usuario se registra en El problema: después de registrar las credenciales de el sitio web, recibo una cookie que no parece conservarse en mi HttpClient, aunque los documentos sugieren que exactamente eso debería suceder.
He aquí algunos de mi 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();
Cuando la salida que el contenido de "cookies", todo parece estar bien (recibo una sesión):
- [version: 0][name: ASP.NET_SessionId][value: xxx][domain: xxx][path: /][expiry: null]
Según entendí, la cookie/sesión se conservará y utilizará en mi HttpClient siempre que no la cierre.
Al leer la siguiente página (que está restringida), utilizando 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
Si la salida que la respuesta de la GET-petición (utilizando response.getStatusLine()
) me sale un "200 OK", pero El análisis del sitio que se devuelve muestra que el inicio de sesión se pierde (solo recupero un formulario de inicio de sesión).
Cualquier ayuda es apreciada.
'httpclient' es el mismo para todas las solicitudes y las direcciones URL son a la vez en el mismo dominio (tanto sin SSL). Probaré Wireshark para descubrir qué se envía, gracias por la pista. – Select0r
Lo he intentado: la cookie se adjunta a la segunda solicitud (GET) y recibo un mensaje "302 Found" que muestra la pantalla de inicio de sesión. – Select0r
@ Select0r: parece que algo está mal con esa segunda solicitud (p. Ej., El servidor espera un encabezado 'Referer:'). – CommonsWare