如果我收听DownloadListener,我会在浏览器已经请求后获取我需要请求的URL .浏览器已经打开了与URL的连接(这就是它知道这是一个下载的方式),为什么它不能通过我的连接?
我还尝试为其分配一个自定义WebViewClient,WebView并shouldOverrideUrlLoading在请求之前使用它来捕获URL.要以这种方式下载文件,我在浏览器之前请求每个URL,然后通过它的Content-Type I决定是否下载它,如果是,那么我从已经打开的连接下载它,否则我关闭连接并指示浏览器加载它,浏览器......再次请求它.另外,shouldOverrideUrlLoading我不知道应该使用哪种方法和哪些cookie来请求给定的URL.
我怎么能不不必要的请求两次,仍然可以下载使用的WebView文件?
我注意到,当Android-OS设备上的用户访问我的网站时,每个页面上都会发生两个请求.第一个是普通浏览器,第二个是"Dalvik".例:
"GET/HTTP/1.1"200 2126" - ""Mozilla/5.0(Linux; Android 5.0.2; SAMSUNG SM-G925F/G925FXXU1AOD8 Build/LRX22G)AppleWebKit/537.36(KHTML,与Gecko一样)SamsungBrowser/3.0 Chrome/38.0. 2125.102 Mobile Safari/537.36"1229 2802
"GET/HTTP/1.1"200 2117" - ""Dalvik/2.1.0(Linux; U; Android 5.0.2; SM-G925F Build/LRX22G)"546 8729
根据我对此的理解,第一个请求来自实际的浏览器,另一个来自运行浏览器的虚拟机(Dalvik).问题是Dalvik请求不使用相同的cookie和/或POST数据,这会触发服务器端的错误.一个例子是当用户注册帐户时.普通浏览器通过POST数据发送,但Dalvik请求只对动作URL进行了GET.同样,如果用户已登录,Dalvik将在基于权限的页面上尝试GET,该页面可能会将其重定向到其他位置,因为它没有会话.
用户没有遇到任何实际问题(据我所知),但是,我们注意到错误记录的尝试.所以我的问题是:我可以肯定地阻止所有访问尝试,如果浏览器代理指示"的Dalvik/.*."?是否会对用户产生任何不利影响?考虑到与Dalvik相关的请求实际上没有重新发布真实数据或进行会话,似乎不太可能.但希望有更多Android经验的人可以提供一些反馈,例如,我应该发出特定的HTTP标头/状态代码,例如"401 Unauthorized"或"400 Bad Request"?
任何帮助,将不胜感激.