后端接口重定向_Java访问重定向接口
背景:开发做了一个免登陆的接口,方便我后续给管理后台做一些小工具,问题来了,给的免登陆接口是个302如图的test_login,在重定向一个200的接口(eload_admin),
原本开始这样做:02这个免登陆接口时,获取登录的cookies,在把登录后的cookies给200的接口,就是正常登录成功
如图:登录成功后获200页面显示的内容session就表示获取了登录态
问题:但是在代码中实施遇到一个问题,获取到的coookie在放到下一个接口不行,弄了好久,之后误打误撞发现,在我访问302的这个接口时,应该先get,在重新get获取cookie,就是需要做两次get,代码如下
public static void main(String[] args) throws ScriptException {
System.out.println("重定向接口:"+htppResopnes.get("http://rosegal.com.trunk.s1.egomsl.com/datafeed/test_login.php?tts=a05b3726d9ba6a6947734e4ef0504ffb"));//请求一次url
String getcookie=htppResopnes.getCookie("http://rosegal.com.trunk.s1.egomsl.com/datafeed/test_login.php?tts=a05b3726d9ba6a6947734e4ef0504ffb");//在请求获取cookie
String getseesion=until.getMapValue(getcookie, "RG_SESSIONID");//获取seesion
//判断是否登录
System.out.println("登录成功:"+htppResopnes.get("http://rosegal.com.trunk.s1.egomsl.com/eload_admin/",getseesion));
}
htppResopnes的方法:
需要注意的是,因为我在请求两个接口的时候用到一个getcookie,和一个get,这里就需要保证他们的头部cookie是需要一致的,这里因为当时设置不一致,导致访问也是失败的
/*** 向指定URL发送GET方法的请求,并携带指定cookie
*@paramurl 发送请求的URL
*@paramcookies 请求时携带的cookie
*@returnResult 所代表远程资源的响应,头信息
**/
public static Mapget(String url,String cookies) {
Cookie staging= null;//Cookie ORIGINDC = null;
int defaultConnectTimeOut = 50000; //默认连接超时,毫秒
int defaultReadTimeOut = 50000; //默认读取超时,毫秒
Map result = new HashMap();
BufferedReader in= null;try{//打开和URL之间的连接
URLConnection connection = newURL(url).openConnection();//此处的URLConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类的子类HttpURLConnection//故此处最好将其转化为HttpURLConnection类型的对象,以便用到HttpURLConnection更多的API.
HttpURLConnection httpURLConnection =(HttpURLConnection) connection;//httpURLConnection.setInstanceFollowRedirects(false);//设置通用的请求属性
httpURLConnection.setRequestProperty("accept", "*/*");
httpURLConnection.setRequestProperty("connection", "Keep-Alive");
httpURLConnection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
httpURLConnection.setRequestProperty("Cookie","LPVID=NiNTJlMDdhOWIxMTM0N2Zm; cookieid=10023149924547802009973797079868836; scarab.visitor=%2231990FE0AA92EF1D%22; cookie_lang=en; bizhong=USD; first_access=yes; rosegal_us=visit; rosegal_caen=visit; _ga=GA1.2.2047632407.1495188930; RG_SESSIONID="+cookies);
httpURLConnection.setConnectTimeout(defaultConnectTimeOut);
httpURLConnection.setReadTimeout(defaultReadTimeOut);//建立连接
httpURLConnection.connect();
result=getResponse(httpURLConnection, in, result);
}catch(Exception requestException) {
System.err.println("发送GET请求出现异常!" +requestException);
}//关闭输入流
finally{try{if (in != null) {
in.close();
}
}catch(Exception closeException) {
closeException.printStackTrace();
}
}returnresult;
}
/*** 根据返回码处理返回值
*@paramhttpURLConnection
*@paramin
*@paramresult
*@return*@throwsUnsupportedEncodingException
*@throwsIOException*/
public static Map getResponse(HttpURLConnection httpURLConnection, BufferedReader in, Mapresult)throwsUnsupportedEncodingException, IOException {int contentLengthAllow = -1; //返回报文长度限制, 为-1时不限制长度
boolean flag = false;for (int i = 0; i < successCode.length; i++) {if (successCode[i] ==httpURLConnection.getResponseCode()) {
flag= true;break;
}
}//返回码非“successCode”时,response为返回message
if(flag) {//定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), "UTF-8"));
String line;//获取所有响应头字段
Map> Hearder =httpURLConnection.getHeaderFields();for(String key : Hearder.keySet()) {
result.put(key, Hearder.get(key).toString());
}
String responseStr= "";while ((line = in.readLine()) != null) {
responseStr+=line;
}//Content长度限制
if (responseStr.length() > contentLengthAllow && contentLengthAllow > 0) {
responseStr= responseStr.substring(0, contentLengthAllow);
}
result.put("Message", httpURLConnection.getResponseMessage());
result.put("Code", String.valueOf(httpURLConnection.getResponseCode()));
result.put("Response", responseStr);
}else{
result.put("Message", httpURLConnection.getResponseMessage());
result.put("Code", String.valueOf(httpURLConnection.getResponseCode()));// result.put("Response", httpURLConnection.getResponseMessage());//获取所有响应头字段
Map> Hearder =httpURLConnection.getHeaderFields();for(String key : Hearder.keySet()) {
result.put(key, Hearder.get(key).toString());
}
}returnresult;
}
/*** 获取请求的cookie
*@returnString
*@paramurl:请求的url
* 创建时间:2017-03-04,最后更新时间:2017-03-04*/
public staticString getCookie(String url) {int defaultConnectTimeOut = 30000; //默认连接超时,毫秒
int defaultReadTimeOut = 30000; //默认读取超时,毫秒
String CookieStr = "";
BufferedReader in= null;try{
String cookieskey= "Set-Cookie";
URLConnection connection= newURL(url).openConnection();
HttpURLConnection httpURLConnection=(HttpURLConnection) connection;
httpURLConnection.setInstanceFollowRedirects(false); 这个就是开启重定向
httpURLConnection.setRequestProperty("accept", "*/*");
httpURLConnection.setRequestProperty("connection", "Keep-Alive");
httpURLConnection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
httpURLConnection.setRequestProperty("Cookie", "LPVID=NiNTJlMDdhOWIxMTM0N2Zm; cookieid=10023149924547802009973797079868836; scarab.visitor=%2231990FE0AA92EF1D%22; cookie_lang=en; bizhong=USD; first_access=yes; rosegal_us=visit; rosegal_caen=visit; _ga=GA1.2.2047632407.1495188930");
httpURLConnection.setConnectTimeout(defaultConnectTimeOut);
httpURLConnection.setReadTimeout(defaultReadTimeOut);/*if (staging != null) {
httpURLConnection.setRequestProperty("Cookie", staging.toString());
}
if (ORIGINDC != null) {
httpURLConnection.setRequestProperty("Cookie", ORIGINDC.toString());
ORIGINDC = null;
}*/
//建立连接
httpURLConnection.connect();//从请求中获取cookie列表
Map> maps =httpURLConnection.getHeaderFields();
List coolist =maps.get(cookieskey);
Iterator it =coolist.iterator();
StringBuffer sbu= newStringBuffer();//拼接cookie再请求
sbu.append("eos_style_cookie=default; ");while(it.hasNext()) {
sbu.append(it.next()+ ";");
}
CookieStr=sbu.toString();
CookieStr= CookieStr.substring(0, CookieStr.length() - 1);
System.out.println("**************CookieStr:" +CookieStr);
}catch(Exception requestException) {
System.err.println("发送GET请求出现异常!" +requestException);
}//关闭输入流
finally{try{if (in != null) {
in.close();
}
}catch(Exception closeException) {
closeException.printStackTrace();
}
}returnCookieStr;
}
后端接口重定向_Java访问重定向接口相关推荐
- java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...
接口方法StringgetHolidayMsg(Stringkey,Stringflag,StringxmlMessage)参数说明keyXX提供给的key值,传入key值不正确不能正常提取数据,值为 ...
- java支持接口吗_java – 支持专用接口方法
此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的. 接口的私有方法可以是抽象的还是默认的? 我可以问一个例子,"私有静态接口方法"在代码方面是否有用? 解 ...
- java 接口对象_Java面向对象之接口——interface
Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口. 硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接 ...
- java 接口重写_java如何实现接口中的重写
普通类implements接口 1.普通方法,抽象方法都得重写: 2.默认方法可重写,也可不重写. 抽象类implements接口 在线视频教程分享:java教学视频 由抽象类来实现接口,则不必重写接 ...
- Java抽象类和接口使用_Java 抽象类和接口
一.抽象类 1.定义 抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法. 注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类: ...
- java发微信_java访问微信接口发送消息
最近在开发activiti流程的时候有个需求:流程到达每个审批节点后,需要向该节点的审批人发送一个消息,提示有审批需要处理. 参考了一下微信的开发者文档和网络上的一些技术博客,现在记录一下.以便后续继 ...
- java调用支付接口实例_Java 调用支付宝接口
1.注册开发者中心应用 登录点击沙箱服务 https://open.alipay.com/platform/developerIndex.htm 2.创建沙箱应用获取APPID和支付宝网关地址(创 ...
- java接口常用_java的常用接口
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 所有实现Collection接口的类 ...
- java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据
简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据. 通过百度天气API调用网络编程接口接收返回的JSON格式的数据. 关于百 ...
最新文章
- JAVA防盗链在报表中的应用实例
- 爬虫篇 --- 分布式爬虫
- java每日小算法(22)
- ajax查询返回字符串,从CFC返回结果之前,对AJAX查询执行字符串函数
- [转]Blue Prism Architecture
- 中秋福利大放送!教你既可朝九晚五,又可诗和远方!
- mysql 5.5.39 安装_CentOS7.2安装mysql5.5.39
- DB2 SQLCODE: -407, SQLSTATE: 23502
- 如何将servlet中的变量在jsp页面中显示---jsp中的jstl表达式(C标签)
- 模拟电子线路(答案)
- ssh远程连接Ubuntu 20.04
- Kubeflow 部署采坑记录
- 苗圩:5G技术将八成用于移动物联网 年内适时发放5G牌照
- udp洪水攻击java_Linux网络编程--洪水攻击详解
- BUPT Summer Journey #test11 A
- 利用python每日自动邮件自动推送股票新闻
- IOS 蓝牙设备断开时间内进行自动链接
- 类和对象常见题目详解
- 你是胡萝卜,是鸡蛋,还是咖啡豆?
- 每天计划完成打勾的app 做完一个打一个勾那种便签
热门文章
- 音乐电台“淘漉音乐”
- 《Linux内核修炼之道》精华分享与讨论(14)——内核中的链表
- 基于AIGC的3D场景创作引擎概述
- android 坐标系 旋转,android IMU旋转矩阵横屏矫正(remapCoordinateSystem函数原理)
- cmpp,sgip协议发送 彩信,视频短信的教程
- 微型计算机的主要硬件以及技术指标,微型计算机的硬件组成.doc
- java web目录文件中.setting这个文件夹是什么意思
- python哈姆雷特词频统计_人生苦短我用Python——哈姆雷特词频统计
- ThoughtWorks给你不一样的入职之旅
- spring boot 外部配置文件1-spring.config.location与spring.config.additional-location的区别