首页 > 其他分享 >HttpURLConnection.openConnection状态码302

HttpURLConnection.openConnection状态码302

时间:2022-10-17 13:55:48浏览次数:49  
标签:String URL 302 url1 openConnection new HttpURLConnection con

今天根据URL,下载视频。

new URL(url1).openConnection() 的时候,用HttpURLConnection接,出现302,以至于后面取不到流,无法读流。

HttpURLConnection con = (HttpURLConnection) new URL(url1).openConnection();
con.setConnectTimeout(15000);
con.setReadTimeout(15000);
//有博文说是多次转发的问题,允许它自动重定向,我这边加上之后没啥用
con.setInstanceFollowRedirects(true);

后面是这样写的,才解决了问题。

/** 根据URL下载视频
     * @author yys
     * @date 2022/10/17 10:58
     * @param url1 下载地址,bdPath 文件保存路径
     * @return string
     */
    public String downVideo(String url1,String bdPath) throws Exception {
        Map<String, Object> queryJson = new HashMap<String, Object>();
        //example.getVideoUrl()这里就是获取视频的url。
        URL url = new URL(url1);
        //获取文件名称,并且此时的文件名是/开始的,所以先分割获取。
        String file = url.getFile();
        String[] split = file.split("/");
        HttpURLConnection con = null;
        //读文件流
        DataInputStream in = null;
        DataOutputStream out = null;
        try {
            // 获取文件流
            con = (HttpURLConnection) new URL(url1).openConnection();
            con.setConnectTimeout(15000);
            con.setReadTimeout(15000);
            con.setInstanceFollowRedirects(false);
            if (con.getResponseCode() == 302) {
                //如果会重定向,保存302重定向地址,以及Cookies,然后重新发送请求(模拟请求)
                String location = con.getHeaderField("Location");
                con.disconnect();
                url1 = location;
                con = (HttpURLConnection) new URL(url1).openConnection();
                con.setConnectTimeout(15000);
                con.setReadTimeout(15000);
            }
            int code = con.getResponseCode();
            if (code != HttpURLConnection.HTTP_OK) {
                queryJson.put("message","error");
                throw new Exception("文件读取失败");
            }
            //读文件流
            in = new DataInputStream(con.getInputStream());
            out = new DataOutputStream(new FileOutputStream(bdPath));
            byte[] buffer = new byte[2048];
            int count = 0;
            while ((count = in.read(buffer)) > 0) {
                out.write(buffer, 0, count);
            }
        }catch (IOException e) {
            throw new Exception("IOException...");
        }finally {
            out.close();
            in.close();
        }
        queryJson.put("message","success");
        return JSON.toJSONString(queryJson);
    }

  




标签:String,URL,302,url1,openConnection,new,HttpURLConnection,con
From: https://www.cnblogs.com/isyysblog/p/16798950.html

相关文章

  • 20201302姬正坤Linux第四章学习笔记
    第四章并发编程一、并行计算导论1、顺序算法与并行算法在描述顺序算法中,常用一个begin-end代码块列出算法。该代码块中的所有步骤都是通过某个任务依次执行的。而并行......
  • 2022-2023-1 20221302《计算机基础与程序设计》第七周学习总结
    作业信息这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK07作业目标 ......
  • http请求方式-HttpURLConnection
    http请求方式-HttpURLConnectionimportcom.alibaba.fastjson.JSON;importcom.example.core.mydemo.http.OrderReqVO;importorg.springframework.lang.Nullable;im......
  • Java如何调用HttpURLConnection类模拟浏览器访问呢?
    下文笔者讲述使用Java代码模拟浏览器请求的方法分享,如下所示:实现思路:使用HttpURLConnection类即可模拟浏览器访问例:packagecom.java265.other;importjava.......
  • 20201302姬正坤第十一章学习笔记
    第十一章EXT2文件系统以下内容是我对本章部分内容的学习总结一、EXT2文件系统数据结构1、虚拟磁盘布局每当文件系统需要从包含它的块设备中读取信息或数据,就将请求底......
  • 2022-2023-1 20221302《计算机基础与程序设计》第五周学习总结
    作业信息 这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业目标 ......
  • HTTP状态码 200 301 302 404 500
    一、1开头1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。代码说明100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在......
  • 在TP中 添加域名 302短链跳转
    1.在项目中,增加域名解析至public2.绑定域名路由至模块/控制器/方法中3.根据tag参数获取原始短链,使用$this->redirect()或header('location://XXX',true,302)进行重......
  • header location 返回 301、302状态
    301永久重定向,第一次重定向以后就会从浏览器缓存中获取重定向地址,下次直接访问302临时重定向,客户端每次都会重新请求后端获取重定向地址301速度更优header('loc......
  • 20201302姬正坤第七八章学习笔记
    Linux系统编程第七、八章学习笔记——文件操作&使用系统调用进行文件操作一、文件操作类别1、硬件类别disk:将硬盘、U盘或SDC盘分区。mkfs:格式化磁盘分区,为系统做好准......