使用httpclient免登录访问

在实际应用中,向服务端获取数据,每次都需要登录,十分麻烦。希望登录一次后,在一定时间内不需要再次登录,就能直接访问服务了。
要实现该功能,也十分简单,首先需要服务端支持记住我的功能,客户端登录的时候选择记住我,这个时候服务端就会把记住我的信息存在cookie中返回给客户端,客户端后面登录的时候只需要带上这个cookie中的值,就可以直接免登录了
具体实现代码:

第一步,模拟登录请求,保存cookie

public static List<String> sendLogin(String url) {
List<String> list = new ArrayList<String>();
HttpGet request = new HttpGet(url);
try {
HttpResponse response = HttpClients.createDefault()
.execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(response.getEntity());
// 从响应消息中获取cookie中的rememberMe值,并保存到list中,供后面使用
Header[] hhh = response.getHeaders("Set-Cookie");
for (Header t : hhh) {
String v = t.getValue();
if (v.startsWith("rememberMe")) {
list.add(v);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}

第二步,使用返回的cookie值,发送直接请求

public static String getDate(String url, List<String> cookies) {
HttpGet request = new HttpGet(url);
try {
for (String cookie : cookies) {
request.addHeader("Cookie", cookie);
}

HttpResponse response = HttpClients.createDefault()
.execute(request);
if (response.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(response.getEntity());
return result;

}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}


第一次获取的cookie值也可以保存在文件,下次直接使用cookie值进行请求,而不需要再次登录。
该功能对于服务端也有要求,对于第二次请求的url,在服务端设置对于记住我功能可以访问。

需要的jar包:

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值