Android通过移动浏览器发送2个请求下载一个文件

时间:2013-01-10 13:28:44

标签: android download billing mobile-browser

真的发生了。我在PHP中进行了测试以确认这一点。

我创建了一个test.php文件并放置:

<?php
    error_log('Downloading...');
    header('Content-type: application/force-download');
    header('Content-Disposition: attachment; filename="test.txt"');
    echo 'test android download';
?>

所以,当我通过任何Android移动浏览器打开www.myurl / test.php时,在error_log.log中我会“下载...”两次。

当我在任何其他移动操作系统(Windows,IOS等)中打开相同的URL时,我在error_log.log文件中只有一次“正在下载...”。

有谁知道发生了什么以及如何避免这种情况?

这对我来说是个大问题,因为当有人下载​​文件时我会执行用户收费。而现在Android手机有1个下载文件的收费。

2 个答案:

答案 0 :(得分:1)

我走到了尽头:(

http://code.google.com/p/android/issues/detail?id=1978

浏览器需要点击服务器以确定某些内容是下载的,并且下载管理器必须单独联系服务器进行下载。

因此,Android启动了第一个请求打开对话框“你确定吗? - 是/否”。 并且如果用户点击“是”Android转发请求到Android DownloadManager并且经理发送第二个请求下载文件。 (某些Android版本立即向DownloadManager发送请求)

问题是请求,第一和第二,都是GET(不是HEAD)的类型。

答案 1 :(得分:0)

在我的情况下,我收到两个请求。 第一个抛出带有描述java.net.SocketException的org.apache.catalina.connector.ClientAbortException:通过peer重置连接:socket

所以我抓住了那个异常并写了日志。 我想你也可以这样做,只有在成功下载后才能向客户收费