HttpURLConnection.openConnection状态码302
今天根据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的更多相关文章
- HTTP状态码302、303和307的故事
今日读书,无法理解HTTP302.303.307状态码的来龙去脉,决定对其做深究并总结于本文. <HTTP权威指南>第3章在讲解30X状态码时,完全没有讲清楚为什么要有 ...
- django 如何重写 HttpResponseRedirect 的响应状态码 302?
fetch无法获取302响应的header信息: 浏览器对于302状态重定向,是直接进行重定向. 且js的fetch请求无法获取(catch也好.then也罢)到302响应的header信息,自然也无 ...
- 面试连环炮系列(十四): HTTP状态码302的跳转逻辑
HTTP状态码302的跳转逻辑 302状态码表示重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地 ...
- HTTP状态码302、303、307区别
HTTP状态码3XX表示重定向,表明浏览器需要执行某些特殊的处理以正确处理请求. 301 Moved Permanently 永久性定向.该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在 ...
- Http请求状态码302,已得到html页面但未跳转?HttpServletRequest转发/HttpServletResponse重定向后,前端页面未跳转?Ajax怎么处理页面跳转?
论断 出现此类错误,服务器端出现问题的可能性不大,大概率是前端问题. 问题概述 事情是这样的,我在用Java开发后端.前端页面使用jQuery库的 $.getJSON() 方法发送了一个Ajax请求. ...
- HTTP 中状态码 302的使用场景
一直都知道302是临时重定向,可是不懂为什么要用这个,直到看到了这个 这样就可以用一个URL,来访问其他的URL上的资源了,非常的nice
- Android之通过HttpURLConnection.getResponseCode状态码抛出异常的问题以及解决方法
1.最近,在学习解析json数据的时候遇到一个错误信息,错误信息如下图所示: 发现解析出来的数据为空,错误信息如上图所示,发现程序中的HttpUtils工具类的22行出现了错误和MainActiv ...
- http状态码204/206/200/302/303/307
HTTP的状态码有很多种,主要有1xx(临时响应).2xx(成功).3xx(已重定向).4xx(请求错误)以及5xx(服务器错误)五个大类,每个大类还对应一些具体的分类.平时我们接触比较多的是200. ...
- 常用的14种HTTP状态码速查手册
分类 1xx \> Information(信息) // 接收的请求正在处理 2xx \> Success(成功) // 请求正常处理完毕 3xx \> Redirection(重定 ...
- Http状态码(转)
什么是Http状态码?(转自http://bbs.tui18.com/thread-11597640-1-1.html) 百度百科上解释为:HTTP状态码(HTTP Status Code)是用以表示 ...
随机推荐
- Python 内置界面开发框架 Tkinter入门篇 乙
本文大概 1685 个字,阅读需花 6 分钟内容不多, 但也花了一些精力如要交流, 欢迎关注我然后评论区留言 谢谢你的点赞收藏分享 这篇文章属于系列文章<Python 内置界面开发框架 Tkin ...
- vulnhub靶场之RIPPER: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Ripper: 1,下载地址:https://download.vulnhub.com/ripper/Ripper.ova,下载后直接vbox打 ...
- Quartz.Net 官方教程 Tutorial 2/3(Listener 和 JobStore)
Listener 调度任务的监听,当前版本支持添加调度,触发器和任务的监听,其中触发器和任务的监听支持通过监听名称进行添加(Add*ListenerMatcher方法) 监听不能对外抛出异常,需要内部 ...
- Portainer功能使用之系统管理
系统管理 点击左边功能菜单栏[Teams]添加团队:例如开源吧(ossbar_team)团队 点击左边功能菜单栏[Users]添加用户:例如ossbar用户,密码自定义 角色说明:Environmen ...
- js实现替换对象(json)格式的键名
某些场景下,我们拿到的键名与预期的键名不符,这个时候就需要替换键名来得到我们想要的内容 let obj = [ { id:1, title:'zs' }, { id:2, title:'ls' } ] ...
- 微信小程序项目中使用icon图标
效果: 步骤: 1.先让ui负责人把你的账号加入到项目中,加入到项目中后就可以在icon图标库中看到该项目 2.在小程序中使用 新建一个view,在上面加一个class,复制icon名字上去即可,注意 ...
- 昇腾AI新技能,还能预防猪生病?
摘要:日前,由华为与武汉伯生科技基于昇腾AI合作研发的"思符(SiFold)蛋白质结构预测平台"正式推出,并成功应用于国药集团动物保健股份有限公司的猪圆环病毒疫苗研发中. 本文分享 ...
- [转载]危险操作一追到底--Linux的历史记录
转自:https://zhuanlan.zhihu.com/p/524921170 危险操作一追到底--Linux的历史记录 KellanFan 为了更好的自己 概述 在Linux下使用his ...
- SOJ1728 题解
题意 有一个长度为 \(n\) 的数列 \(a_0,a_1,\dots,a_{n-1}\) 以及一个长度为 \(m\) 的操作序列 \((b_0,c_0),(b_1,c_1)\dots(b_{m-1} ...
- lg8365题解
容易发现我们一定会先加后乘,使用调整法可以证明这个结论. 并且可以发现除了\(a_i\)值为\(1\)的数外(假设他们的\(a\)值和为\(s\)),其他的数最多只会选\(1\)个做加法操作(设如果其 ...