stch1161 2013-07-24 03:04 采纳率: 0%
浏览 897

webview中下载地址变化,求解救

在webview中实现下载,在setDownloadListener的public void onDownloadStart(String arg0, String arg1, String arg2,String arg3, long arg4)函数,参数arg0是下载的地址,为什么这个下载地址不是唯一的,是会变化的。如我扫描金山wps安卓版的二维码,下载的时候打印arg0的内容,有时是http://kad.www.wps.cn/wps/download/android/kingsoftoffice_2052/moffice_2052_wpscn.apk,有时是http://120.198.233.13/videoplayer/moffice_2052_wpscn.apk?ich_u_r_i=687a44106a1e58403c9d4ae5c165567d&ich_s_t_a_r_t=0&ich_e_n_d=0&ich_k_e_y=1345078924750263372456&ich_t_y_p_e=1&ich_d_i_s_k_i_d=4&ich_u_n_i_t=1,而且它们的出现是没有规律的,担都能正常下载,求教,为什么会这样子~~~~我希望得到的是第一个地址那种形式,或者有没有得转换的

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-09 10:50
    关注

    在 setDownloadListener 的 onDownloadStart 函数中,参数 arg0 是下载的地址,这个地址可能会发生变化的原因是,在下载过程中,服务器可能会返回一个重定向的 HTTP 响应,这个响应告诉客户端浏览器(或者是 webview)新的地址,浏览器(或者是 webview)会自动按照新的地址进行下载。


    如果你希望得到的是第一种形式的地址,或者有一个方法可以将变化的地址转换成你希望的地址,那么你可以通过使用 HTTP 头中的 Location 字段来解决这个问题。


    你可以在下载过程中,通过程序解析 HTTP 头中的 Location 字段,然后将这个字段的值记录下来,最后在下载完成之后使用这个地址来获取下载的文件。


    下面是一个示例代码,可以帮助你理解如何解析 HTTP 头中的 Location 字段:

    URL url = new URL(arg0);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setInstanceFollowRedirects(false);
    connection.connect();
    
    // 获取 HTTP 头中的 Location 字段
    String location = connection.getHeaderField("Location");
    
    // 使用新的地址进行下载
    URL newUrl = new URL(location);
    InputStream inputStream = newUrl.openStream();
    
    // 将下载的文件保存到本地
    // 代码省略
    
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)