Java中使用HttpClient模拟登陆Cloudrea Manager网站

使用Java进行网站获取数据时经常需要携带登陆的 Cookie 信息,然而 Cookie 是有时效性的,所以经常碰到 Cookie 失效的情况。

以下即为 Cookie 失效后自动重新获取的方式

需要的依赖:
本文将示例如何使用 HttpClient 模拟登陆Cloudrea Manager集群平台并获取其登录的 Cookie 信息。


pom.xml 文件中引入 HttpClient 依赖包(若其他依赖包含有此依赖,则无需引入):

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpclient</artifactId>
	<version>4.5.6</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpcore</artifactId>
	<version>4.4.10</version>
</dependency>

获取 Cookie 并将其设置http://192.168.50.57:7180/cmf/command/3897/details.json的请求头

完整代码如下:

package com.bjdv.yfzx.tenement.controller.clusterManager;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.springframework.web.bind.annotation.*;


@RestController
public class HttpLogin {
    @PostMapping("/getDetail")
    public static String getDetail(@RequestBody String idInfo) {
        // 登陆 Url
        String loginUrl = "http://192.168.50.57:7180/j_spring_security_check";
        // 需登陆后访问的 Url
        JSONObject jsonObject = JSONObject.parseObject(idInfo);
        String id = jsonObject.getString("id");
        String detailUrl = "http://192.168.50.57:7180/cmf/command/"+id+"/details.json";

        HttpClient httpClient = new HttpClient();

        // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
        PostMethod postMethod = new PostMethod(loginUrl);

        // 设置登陆时要求的信息,用户名和密码
        NameValuePair[] data = { new NameValuePair("j_username", "admin"), new NameValuePair("j_password", "admin") };
        postMethod.setRequestBody(data);
        try {
            // 设置 HttpClient 接收 Cookie,用与浏览器一样的策略
            httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            int statusCode=httpClient.executeMethod(postMethod);

            // 获得登陆后的 Cookie
            Cookie[] cookies = httpClient.getState().getCookies();
            StringBuffer tmpcookies = new StringBuffer();
          

            for (Cookie c : cookies) {
                tmpcookies.append(c.toString() + ";");
                System.out.println("cookies = "+c.toString());
            
            }

            if(statusCode==302){//重定向到新的URL
                System.out.println("模拟登录成功");
                // 进行登陆后的操作
                GetMethod getMethod1 = new GetMethod(detailUrl);
                // 每次访问需授权的网址时需带上前面的 cookie 作为通行证
                getMethod1.setRequestHeader("cookie", tmpcookies.toString());
                httpClient.executeMethod(getMethod1);
                // 打印出返回数据,检验一下是否成功
                String text = getMethod1.getResponseBodyAsString();
                System.out.println(text);
                return text;
            }
            else {
                System.out.println("登录失败");
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

通过postman测试,能正常返回json数据
在这里插入图片描述

注意:
cloudrea 前端页面展示的登录接口:http://192.168.50.57:7180/cmf/login
在这里插入图片描述
通过控制台的network可以看出,实际的登录接口是http://192.168.50.57:7180/j_spring_security_check,找到正确的登录接口,设置好请求方式和网站对应的账号密码使用上述代码就能够正常访问网站上的数据。在这里插入图片描述
参考地址:https://www.cnblogs.com/zhimingxin/p/8473883.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值