2013-07-29 12 views
6

Ich versuche, eine Datei mit WebView von Dateihosts (wie zippyshare.com) herunterladen. Problem ist, kann ich Intents nicht verwenden, um einen Browser zu öffnen, oder es über DownloadManager umleiten, da es Session/Cookie-basiert ist, und das Starten dieser Methoden leitet die Zip-Datei in die ursprüngliche HTML-Datei um erneut zu laden.Wie kann ich mit Android eine Session/Cookie-basierte Datei mit webView herunterladen?

Ich habe versucht:

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

und:

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

, um zu versuchen, das Cookie zu erhalten, und während ich die Header sehen sind gerade fein gesendet, es leitet nach wie vor auf den HTML-Link was zu der Annahme führt, dass es auf Sitzungen basiert.

Gibt es eine Möglichkeit, eine Datei auf diese Weise herunterzuladen?

Antwort

6

Ich hatte mit dem gleichen Problem zu tun, und ich schaffte es, Ihre erste Lösung zu arbeiten, nur mit einer kleinen Änderung. Ersetzen Sie einfach Set-Cookie Breite Cookie:

request.addRequestHeader("Cookie", cookie); 

Btw. sitzungsbasiert bedeutet, dass die Authentifizierungsdaten nicht in Cookies gespeichert werden, sondern serverseitig durch einen Schlüssel identifiziert werden, der in Cookies gespeichert wird. Es spielt also keine Rolle, ob es sessionbasiert ist oder nicht, Cookies werden in beiden Fällen verwendet.

Ich habe auch die zweite Lösung ausprobiert (es ist einfacher), aber von dem, was ich gelesen habe, scheint Browser.EXTRA_HEADERS nur von der Standard-Android-Browser unterstützt wird. Wenn der Benutzer einen anderen Browser in seinem Gerät hat, wird es nicht funktionieren.

Dies ist eine alte Frage, aber ich hoffe, es wird jemandem helfen.

+0

Danke tobik, ich guck mal am Abend, hoffe es klappt :) – trueicecold

Verwandte Themen