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();
    
    // 将下载的文件保存到本地
    // 代码省略
    
    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?