¿Cómo puedo usar Android para descargar un archivo basado en sesión / cookie usando webView?

Estoy tratando de descargar un archivo usando webView de hosts de archivos (como zippyshare.com). El problema es que no puedo usar intenciones para abrir un navegador, o redirigirlo a través de DownloadManager, ya que es sesión / cookie basado, y el lanzamiento de esos métodos redirecciona el archivo zip en el archivo html original para volver a descargar.

He intentado:

Uri source = Uri.parse(url); DownloadManager.Request request = new DownloadManager.Request(source); String cookie = CookieManager.getInstance().getCookie(url); request.addRequestHeader("Set-Cookie", cookie); request.addRequestHeader("User-Agent", view.getSettings().getUserAgentString()); request.addRequestHeader("Accept", "text/html, application/xhtml+xml, *" + "/" + "*"); request.addRequestHeader("Accept-Language", "en-US,en;q=0.7,he;q=0.3"); request.addRequestHeader("Referer", url); // Use the same file name for the destination final File destinationDir = new File (Environment.getExternalStorageDirectory(), cordova.getActivity().getPackageName()); if (!destinationDir.exists()) { destinationDir.mkdir(); // Don't forget to make the directory if it's not there } File destinationFile = new File (destinationDir, source.getLastPathSegment()); Log.e("FILEPOSITION", Uri.fromFile(destinationFile).toString()); request.setDestinationUri(Uri.fromFile(destinationFile)); // Add it to the manager manager.enqueue(request); 

y:

 Bundle bundle = new Bundle(); String cookie = CookieManager.getInstance().getCookie(url); bundle.putString("cookie", cookie); bundle.putString("User-Agent", view.getSettings().getUserAgentString()); Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse(url)); intent.putExtra(Browser.EXTRA_HEADERS, bundle); cordova.getActivity().startActivity(intent); 

Para tratar de preservar la cookie, y mientras veo los encabezados se envían muy bien, todavía se redirige al enlace html, lo que me lleva a creer que es la sesión basada.

¿Hay una manera de descargar un archivo de esa manera?

Yo estaba lidiando con el mismo problema y me las arreglé para conseguir su primera solución de trabajo, sólo con un ligero cambio. Simplemente reemplaza Set-Cookie Cookie :

 request.addRequestHeader("Cookie", cookie); 

Por cierto. Basada en sesión significa que los datos de autenticación no se almacenan en las cookies, pero en el lado del servidor, identificado por una clave, que se almacena en las cookies. Así que en realidad no importa si se basa en la sesión o no, las cookies se utilizan en ambos casos.

También he probado la segunda solución (es más simple), pero de lo que he leído parece que Browser.EXTRA_HEADERS es compatible sólo con el navegador predeterminado de Android. Así que si el usuario tiene un navegador diferente en su dispositivo, no funcionará.

Esta es una vieja pregunta pero espero que ayude a alguien.

  • ¿Cuáles son los formatos de archivo en el directorio de caché de Android WebView (data_1, f_000001 etc.)?
  • Android: Abrir un ContextMenu desde onLongPress en WebView personalizado
  • Android: muestra .mht o .mhtml en la vista Web en la aplicación
  • Cómo traer el campo enfocado en la vista usando iscroll y Android WebView
  • Android: ¿Es posible y cómo cambiar el tamaño de letra de una página HTML que se muestra en un WebView?
  • ShouldOverrideUrlLoading (...) no se ejecuta si "window.location.href" modificado en una devolución de llamada de tiempo de espera
  • Activar opción de zoom en WebView Android
  • Vista Web de Android: la página web debe ajustarse a la pantalla del dispositivo
  • WebSocket en Android WebView
  • WebView Atrás, Actualizar, Reenviar? Simplemente no funciona!
  • Android WebView setCertificate emite problemas de SSL
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.