android - 带 cookie 身份验证的 DownloadManager

标签 android android-download-manager download-manager

我正在尝试使用 DownloadManager 从我的服务器解析带有 JSESSIONID 的 cookie 来获取一个 zip 文件。我正在使用 HTTPCLIENT lib 获取此 JSESSIONID 来完成我所有的进程登录,并设置一个变量 JSESSIONID 以供以后在我的 DownloadManager 请求中使用。

我的下载请求:

    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(htmlUrlDownload));

    request.addRequestHeader("Cookie", "JSESSIONID=" + JSESSIONID);
    request.addRequestHeader(Constants.USER_AGENT, Constants.TARGET_REQUEST_HEADER);

    request.setDescription("Baixando " + metaDado.getType());
    request.setTitle("Download");
    request.allowScanningByMediaScanner();
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

    String nameFile = offlineUuid + ".zip";

    fileName = nameFile;

    filePath = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DOWNLOADS
            + File.separator + fileName;

    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, nameFile);

    final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);

    final long downloadId = manager.enqueue(request);

问题是下载永远不会开始,COLUMN_REASON 将代码返回到 ERROR_UNHANDLED_HTTP_CODE

但是,如果我尝试使用 Dropbox 链接在没有身份验证的情况下或使用 httpclient 下载相同的文件,它工作得很好,我做错了什么?

如何获得更好的消息错误?

最佳答案

您的代码没有问题,似乎您的服务器正在响应 HTTP 重定向状态代码,这导致 DownloadManager 无法处理下载。

来自 Android 文档:-

public static final int ERROR_UNHANDLED_HTTP_CODE

Added in API level 9 Value of COLUMN_REASON when an HTTP code was received that download manager can't handle.

请看下面的代码 fragment :-

来自 Android 框架源代码 DownloadManger.java

case Downloads.Impl.STATUS_UNHANDLED_HTTP_CODE:
                case Downloads.Impl.STATUS_UNHANDLED_REDIRECT:
                    return ERROR_UNHANDLED_HTTP_CODE;

所以你需要检查你的服务器日志是否有这个问题,或者将直接文件 url 传递给下载管理器,这不会导致任何重定向。

另请注意,您需要在 Androidmanifest.xml 中获得以下两个权限才能按预期下载

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

关于android - 带 cookie 身份验证的 DownloadManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844697/

相关文章:

Android:DownloadManager 是作为 FIFO 还是同时下载文件

java - 为下载管理器添加 HTTPS 支持

java - map V2 上带有地理编码器的 NullPointerException - Android

android - 使用 CameraX 或 Camera2 获取相机 ISO/快门速度

android - 如何使用 Intellij IDE(最好是 Android Studio)导航/查看/编辑 android 平台源代码(AOSP)?

android - 如何在抽屉导航菜单中名为 "view downloads"的选项之一中显示下载的图像(历史记录)

android - 控制android中下载管理器的下载顺序

android - DownloadManager 下载完成但文件未存储

android - DownloadManager 不将下载的文件存储在下载文件夹中

java - 从 kotlin 服务中的 java 应用程序类获取值