Как я могу использовать Android для загрузки файла на основе сеанса / файла cookie с помощью webView?

Я пытаюсь загрузить файл с помощью webView из хостов файлов (например, zippyshare.com). Проблема в том, что я не могу использовать намерения для открытия браузера или перенаправлять его через DownloadManager, так как он основан на сеансе / cookie, и запуск этих методов перенаправляет zip-файл в исходный html-файл на re-downlad.

Я пробовал:

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

а также:

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

Чтобы попытаться сохранить файл cookie, и, хотя я вижу, что заголовки отправляются просто отлично, он все же перенаправляется на ссылку html, что заставляет меня думать, что это сеанс.

Есть ли способ загрузки файла таким образом?

Я имел дело с одной и той же проблемой, и мне удалось заставить ваше первое решение работать, только с небольшими изменениями. Просто замените Set-Cookie width Cookie :

 request.addRequestHeader("Cookie", cookie); 

Btw. На основе сеанса означает, что данные auth не хранятся в файлах cookie, а на стороне сервера, идентифицированных ключом, который хранится в файлах cookie. Поэтому на самом деле не имеет значения, работает ли это на основе сеанса или нет, cookie-файлы используются в обоих случаях.

Я также попробовал второе решение (это проще), но из того, что я прочитал, кажется, что Browser.EXTRA_HEADERS поддерживается только браузером Android по умолчанию. Поэтому, если у пользователя есть другой браузер в своем устройстве, он не будет работать.

Это старый вопрос, но я надеюсь, что это поможет кому-то.