【问题标题】:Android DownloadManager and SSL (https)Android 下载管理器和 SSL (https)
【发布时间】:2011-12-27 17:09:58
【问题描述】:

哦,太好了。总有一些其他的东西...... Grrr......

无论如何,为了让我的 Android 应用程序可以找到一张 Picasa 图片并使用下载管理器下载它,我日复一日地工作在模糊、不完整和矛盾的 Picasa 信息中。所以刚才我做了最后的润色并按下“运行”按钮。在 DownloadManager 尝试下载文件之前一切正常:

java.lang.IllegalArgumentException: Can only download HTTP URIs: https://example.com/image.jpg

告诉我你在开玩笑。告诉我他们没有制作无法处理 SSL 的下载管理器...

更好的是,告诉我如何在 Android 下载管理器中打开 SSL 访问。

【问题讨论】:

    标签: android ssl https download-manager


    【解决方案1】:

    我之前也遇到过同样的问题。是的,我看到 HTTPS 支持已经在 ICS 中,但在 2.3.7 及以下版本中没有,但我们可以提取源代码来创建一个 DownloadManager 来支持它。

    基于示例代码 http://android-er.blogspot.com/2011/07/sample-code-using-androidappdownloadman.html 我用提取的 DownloadManager 做了一个演示以支持 HTTPS。

    您可以在https://github.com/alvinsj/android-https-downloadmanager-demo 找到示例代码,只需将 url 更改为基于 https 的 url 即可运行。

    【讨论】:

    • 您能否提供有关 ICS 中 HTTPS 支持的更多信息?我可能需要获取源代码并替换 2.3.x 中的 DownloadManager
    【解决方案2】:

    是的,DownloadManager 似乎只支持HTTP 协议:http://www.google.com/codesearch#cZwlSNS7aEw/frameworks/base/core/java/android/app/DownloadManager.java&exact_package=android&q=Can%20only%20download%20HTTP%20URIs&type=cs&l=343

    我也很失望,因为我只是想在 HTTPS 网站上使用它。

    【讨论】:

    • 仅供参考,目前网上的源代码显示它现在支持HTTPS。我还没有进行任何实验来查看何时添加了 HTTPS 支持。
    • 我认为您的链接已损坏
    【解决方案3】:

    我找到了一个非常简单的解决方案:

    request = new DownloadManager.Request(sourceUrl.replace("https://", "http://"))

    令人惊讶的是,我尝试过的所有 https 网址都有效。我不确定 https 的安全性,但没有例外,文件已正确下载。

    【讨论】:

    • 此响应不仅假定服务器在端口 443 和端口 80 上提供内容(很可能不是这种情况),而且无法通过安全连接成功发送数据,这就是 SSL 的重点。它没有“工作”——代码只是掩盖了你真的是从一个不同的、非安全端口下载的事实。就像我想去英国的多佛尔,但我的车无法从美国科罗拉多州开出,所以你输入destination.replace("o", "en"),哇,我到了目的地!但现在我真的在丹佛,而不是多佛……
    • @GarretWilson 实际上不是......我已经测试了你在这里描述的内容。 DownloadManager 能够从 https 站点下载安全内容。唯一的问题是 DownloadManager.Request(url) 构造函数中的错误。它进行了错误的验证。因此,如果您指定一个 http url,它会在内部将其转发到 https。我已经使用我自己的服务器对其进行了测试,我们只允许安全连接。这也可以通过使用 http 在浏览器中打开 https url 来验证 - 它会自动转发到 https 站点。
    • 如果您的浏览器从 HTTP 重定向到 HTTPS,那只是因为您的服务器配置为侦听端口 80 并发出重定向到端口 443。也许您是说内部 DownloadManager 知道如何遵循 HTTP 重定向如果它被重定向到一个 SSL 站点,它将正确连接到一个。我没有测试过。很高兴了解您控制服务器的特定情况,但不能保证所有(甚至大多数)服务器都会如此配置,因此这不是通用解决方案。
    • 如果您的内容是通过 http 和 https 提供的 - 在这种情况下对您有好处。但这不能被视为一种解决方法......
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2014-01-23
    相关资源
    最近更新 更多