今天根据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);
}

  



HttpURLConnection.openConnection状态码302的更多相关文章

  1. HTTP状态码302、303和307的故事

        今日读书,无法理解HTTP302.303.307状态码的来龙去脉,决定对其做深究并总结于本文.       <HTTP权威指南>第3章在讲解30X状态码时,完全没有讲清楚为什么要有 ...

  2. django 如何重写 HttpResponseRedirect 的响应状态码 302?

    fetch无法获取302响应的header信息: 浏览器对于302状态重定向,是直接进行重定向. 且js的fetch请求无法获取(catch也好.then也罢)到302响应的header信息,自然也无 ...

  3. 面试连环炮系列(十四): HTTP状态码302的跳转逻辑

    HTTP状态码302的跳转逻辑 302状态码表示重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地 ...

  4. HTTP状态码302、303、307区别

    HTTP状态码3XX表示重定向,表明浏览器需要执行某些特殊的处理以正确处理请求. 301 Moved Permanently 永久性定向.该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在 ...

  5. Http请求状态码302,已得到html页面但未跳转?HttpServletRequest转发/HttpServletResponse重定向后,前端页面未跳转?Ajax怎么处理页面跳转?

    论断 出现此类错误,服务器端出现问题的可能性不大,大概率是前端问题. 问题概述 事情是这样的,我在用Java开发后端.前端页面使用jQuery库的 $.getJSON() 方法发送了一个Ajax请求. ...

  6. HTTP 中状态码 302的使用场景

    一直都知道302是临时重定向,可是不懂为什么要用这个,直到看到了这个 这样就可以用一个URL,来访问其他的URL上的资源了,非常的nice

  7. Android之通过HttpURLConnection.getResponseCode状态码抛出异常的问题以及解决方法

    1.最近,在学习解析json数据的时候遇到一个错误信息,错误信息如下图所示:   发现解析出来的数据为空,错误信息如上图所示,发现程序中的HttpUtils工具类的22行出现了错误和MainActiv ...

  8. http状态码204/206/200/302/303/307

    HTTP的状态码有很多种,主要有1xx(临时响应).2xx(成功).3xx(已重定向).4xx(请求错误)以及5xx(服务器错误)五个大类,每个大类还对应一些具体的分类.平时我们接触比较多的是200. ...

  9. 常用的14种HTTP状态码速查手册

    分类 1xx \> Information(信息) // 接收的请求正在处理 2xx \> Success(成功) // 请求正常处理完毕 3xx \> Redirection(重定 ...

  10. Http状态码(转)

    什么是Http状态码?(转自http://bbs.tui18.com/thread-11597640-1-1.html) 百度百科上解释为:HTTP状态码(HTTP Status Code)是用以表示 ...

随机推荐

  1. 如何找到CSDN中关注的用户和粉丝?

    如何找到CSDN中关注的用户和粉丝? 刚刚在CSDN个人账号里找了半天都没找到自己关注的人 对CSDN的页面更新感到很迷, 个人账号管理很不人性化, 或者说是根本找不到自己关注的用户以及关注自己的粉丝 ...

  2. 【随笔记】ATECC608 加密芯片调试记录

    芯片通信测试 根据芯片手册,ATECC608B 的 7bit 器件地址是:0x35 root@linux:/usr/bin# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a ...

  3. 四、python解释器、环境变量和多版本共存

    目录 一.python解释器 1.python发展方向 2.python解释器 1.历史 2.版本 3.下载 4.安装 5.使用 二.环境变量与多版本共存 环境变量设置 多版本共存 三.运行pytho ...

  4. 【学习日志】@NotNull注解不生效问题

    后端API需要接受fe传过来的参数,就必然涉及到参数校验. Spring提供了使用注解进行非法判断的引用(需要主动引入),继承自 spring-boot-starter-parent <depe ...

  5. 【HMS Core】机器学习服务助力APP快速集成图像分割与上传功能

    ​ 1.介绍 总览 机器学习服务(ML Kit)提供机器学习套件,为开发者使用机器学习能力开发各类应用,提供优质体验.得益于华为长期技术积累,ML Kit为开发者提供简单易用.服务多样.技术领先的机器 ...

  6. redis-07主从复制

    转 https://www.jianshu.com/p/06ab9daf921d https://www.jianshu.com/p/06ab9daf921d 1 基本说明 我们所说的主从复制,主机数 ...

  7. npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    出现问题原因: vscode运行前端命令,没有为安装的npm配置环境变量 解决办法: 配置环境变量,可查看前一篇文章nodejs 环境变量配置 配置完后还出如题原因: 重新启动vscode终端powe ...

  8. ctfshow_web入门 sql注入(web171~248)

    sql注入 这是算是学习+做题+记录的一个笔记吧,而且基本都是看着Y4师傅的博客做的 由于是做过sqli靶场,所以这个就记录快点了.如果靶场没遇到的,也会做笔记. union 联合注入 web171 ...

  9. LG P5043 树同构

    \(\text{problem}\) 无根树同构的判断 \(\text{Analysis}\) 考虑树哈希,注意使用较正确的哈希方法 无根树同构有个性质 只要判断以这两棵树的重心为根是否同构即可 \( ...

  10. 题解 [SHOI2002] 百事世界杯之旅

    其实做这道题还蛮难受的...因为这个每一次有无限种可能我有钱我可以去买无限瓶可乐啊但是不是可口我不是很赞同┓( ´∀` )┏ 然后参考了这篇题解发现错位相减这样的方法,让我们一起膜拜 Butterfl ...