背景:开发做了一个免登陆的接口,方便我后续给管理后台做一些小工具,问题来了,给的免登陆接口是个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访问重定向接口相关推荐

  1. java xml接口实例_Java访问WebService接口方法 , 返回xml数据,能根据 下面的能给我写个实例吗?略急...

    接口方法StringgetHolidayMsg(Stringkey,Stringflag,StringxmlMessage)参数说明keyXX提供给的key值,传入key值不正确不能正常提取数据,值为 ...

  2. java支持接口吗_java – 支持专用接口方法

    此支持允许接口的非抽象方法在它们之间共享代码.私有方法可以是静态的或实例的. 接口的私有方法可以是抽象的还是默认的? 我可以问一个例子,"私有静态接口方法"在代码方面是否有用? 解 ...

  3. java 接口对象_Java面向对象之接口——interface

    Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口. 硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接 ...

  4. java 接口重写_java如何实现接口中的重写

    普通类implements接口 1.普通方法,抽象方法都得重写: 2.默认方法可重写,也可不重写. 抽象类implements接口 在线视频教程分享:java教学视频 由抽象类来实现接口,则不必重写接 ...

  5. Java抽象类和接口使用_Java 抽象类和接口

    一.抽象类 1.定义 抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法. 注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类: ...

  6. java发微信_java访问微信接口发送消息

    最近在开发activiti流程的时候有个需求:流程到达每个审批节点后,需要向该节点的审批人发送一个消息,提示有审批需要处理. 参考了一下微信的开发者文档和网络上的一些技术博客,现在记录一下.以便后续继 ...

  7. java调用支付接口实例_Java 调用支付宝接口

    1.注册开发者中心应用   登录点击沙箱服务 https://open.alipay.com/platform/developerIndex.htm 2.创建沙箱应用获取APPID和支付宝网关地址(创 ...

  8. java接口常用_java的常用接口

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements). 所有实现Collection接口的类 ...

  9. java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据

    简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据. 通过百度天气API调用网络编程接口接收返回的JSON格式的数据. 关于百 ...

最新文章

  1. JAVA防盗链在报表中的应用实例
  2. 爬虫篇 --- 分布式爬虫
  3. java每日小算法(22)
  4. ajax查询返回字符串,从CFC返回结果之前,对AJAX查询执行字符串函数
  5. [转]Blue Prism Architecture
  6. 中秋福利大放送!教你既可朝九晚五,又可诗和远方!
  7. mysql 5.5.39 安装_CentOS7.2安装mysql5.5.39
  8. DB2 SQLCODE: -407, SQLSTATE: 23502
  9. 如何将servlet中的变量在jsp页面中显示---jsp中的jstl表达式(C标签)
  10. 模拟电子线路(答案)
  11. ssh远程连接Ubuntu 20.04
  12. Kubeflow 部署采坑记录
  13. 苗圩:5G技术将八成用于移动物联网 年内适时发放5G牌照
  14. udp洪水攻击java_Linux网络编程--洪水攻击详解
  15. BUPT Summer Journey #test11 A
  16. 利用python每日自动邮件自动推送股票新闻
  17. IOS 蓝牙设备断开时间内进行自动链接
  18. 类和对象常见题目详解
  19. 你是胡萝卜,是鸡蛋,还是咖啡豆?
  20. 每天计划完成打勾的app 做完一个打一个勾那种便签

热门文章

  1. 音乐电台“淘漉音乐”
  2. 《Linux内核修炼之道》精华分享与讨论(14)——内核中的链表
  3. 基于AIGC的3D场景创作引擎概述
  4. android 坐标系 旋转,android IMU旋转矩阵横屏矫正(remapCoordinateSystem函数原理)
  5. cmpp,sgip协议发送 彩信,视频短信的教程
  6. 微型计算机的主要硬件以及技术指标,微型计算机的硬件组成.doc
  7. java web目录文件中.setting这个文件夹是什么意思
  8. python哈姆雷特词频统计_人生苦短我用Python——哈姆雷特词频统计
  9. ThoughtWorks给你不一样的入职之旅
  10. spring boot 外部配置文件1-spring.config.location与spring.config.additional-location的区别