2013-07-29 9 views
6

Sto provando a scaricare un file usando webView dagli host di file (come zippyshare.com). Il problema è che non posso usare intenti per aprire un browser, o reindirarlo tramite DownloadManager, poiché è basato su sessione/cookie, e l'avvio di tali metodi reindirizza il file zip nel file html originale a re-downlad.Come posso utilizzare Android per scaricare un file basato su sessione/cookie usando webView?

ho provato:

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

e:

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

per cercare di conservare il cookie, e mentre vedo le intestazioni vengono inviati bene, reindirizza ancora al link html , che mi porta a credere che sia basato sulla sessione.

Esiste un modo per scaricare un file in questo modo?

risposta

6

Mi stavo occupando dello stesso problema e sono riuscito a far funzionare la prima soluzione, solo con una leggera modifica. Basta sostituire Set-Cookie larghezza Cookie:

request.addRequestHeader("Cookie", cookie); 

Btw. basato su significa che i dati di autenticazione non sono memorizzati nei cookie ma sul lato server, identificati da una chiave, che è memorizzata nei cookie. Quindi in realtà non importa se è basato sulla sessione o meno, i cookie vengono utilizzati in entrambi i casi.

Ho anche provato la seconda soluzione (è più semplice) ma da quello che ho letto sembra che lo Browser.EXTRA_HEADERS sia supportato solo dal browser Android predefinito. Quindi se l'utente ha un browser diverso nel suo dispositivo non funzionerà.

Questa è una vecchia domanda ma spero che possa aiutare qualcuno.

+0

Grazie a tobik, darò un'occhiata alla sera, spero che funzioni :) – trueicecold