【问题标题】:DownloadManager with cookie authentication带有 cookie 身份验证的 DownloadManager
【发布时间】:2013-04-05 22:32:51
【问题描述】:

我正在尝试使用 DownloadManager 从我的服务器解析一个带有 JSESSIONID 的 cookie 来获取一个 zip 文件。我正在使用 HTTPCLIENT lib 进行所有进程登录并设置一个变量 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

但是,如果我尝试使用未经身份验证的保管箱链接或使用 httpclient 下载相同的文件,它可以完美运行,我做错了什么?

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

【问题讨论】:

    标签: android android-download-manager download-manager


    【解决方案1】:

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

    来自 Android 文档:-

    public static final int ERROR_UNHANDLED_HTTP_CODE

    在 API 级别 9 中添加了 HTTP 代码时的 COLUMN_REASON 值 收到下载管理器无法处理。

    见下面代码sn-p:-

    来自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"/>
    

    【讨论】:

    • 我无权访问它。当我说我的服务器时,是我使用的服务器,明白吗? :(
    • 无论如何,下载管理器不支持重定向,并且由于重定向,您的下载请求失败。 This link might be useful to you..
    • 你赢得了赏金吗?你说得对,我的问题就是重定向。
    • nope.. 每个赏金都有时间限制(以及宽限期),如果您不将其分配给某人,它将永远丢失。
    猜你喜欢
    • 2015-06-02
    • 2021-05-12
    • 1970-01-01
    • 2017-10-19
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多