2012-06-07 14 views
8

Estoy usando la API de Android DownloadManager para descargar archivos del servidor de mi escuela. Tengo permiso para acceder a estos archivos con un inicio de sesión, pero lo que no he podido averiguar es cómo enviar cookies con mi DownloadManager.Request El código de descarga está debajo. dm es un DownloadManager global, y url es un script de descarga php que redirige a un archivo, generalmente pdf/doc/etc.¿Es posible enviar cookies en un DownloadManager de Android?

dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
Request request = new Request(Uri.parse(url)); 
dm.enqueue(request); 

Intent i = new Intent(); 
i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); 
startActivity(i); 

Esto funciona bien, pero obtengo un archivo html descargado, que es la página de inicio de sesión del sitio web de mi escuela. Obviamente, tengo que enviar las cookies de la sesión del usuario de alguna manera, pero no veo ninguna forma de hacerlo en la documentación.

Respuesta

18

Las cookies se envían a través de un encabezado HTTP (denominado, apropiadamente, "Cookie") y, afortunadamente, DownloadManager.Request has a method para agregar sus propios encabezados.

Así que lo que se quiere hacer es algo como esto:

Request request = new Request(Uri.parse(url)); 
request.addRequestHeader("Cookie", "contents"); 
dm.enqueue(request); 

Vas a tener que reemplazar "contenido" con el contenido real de galletas, por supuesto. La clase CookieManager debería ser útil para obtener la cookie actual para el sitio, pero si eso falla, otra opción sería hacer que su aplicación haga una solicitud de inicio de sesión y obtener la cookie devuelta.

+3

Eso funcionó perfectamente. Ya estaba administrando las cookies manualmente en un 'Map ' así que era tan simple como formatear eso como 'KEY1 = VALUE1; KEY2 = VALUE2;' y pasándolo a la función que mencionaste. ¡Gracias! – Logiraptor

+0

Esto es simplemente perfecto: he recorrido otras pocas carreteras, ¡pero esto lo ha encasillado! Recibo mis cookies de en PageFinished llamando a "CookieManager.getInstance(). GetCookie (url);" ¡y luego puedo usar el resultado directamente como valores de Cookie! – slott

Cuestiones relacionadas