java爬虫实现自动化操作gitlab私服

maven依赖

 <!--gitlab API-->
        <!--解决gitlab依赖中的版本冲突        -->

        <dependency>
            <groupId>org.gitlab</groupId>
            <artifactId>java-gitlab-api</artifactId>
            <version>4.1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>

            </exclusions>
        </dependency>

        <!--   模拟登录gitlab获取token-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

封装工具类

package cn.sdu.weblab.util;

import cn.sdu.weblab.entity.User;
import cn.sdu.weblab.entity.pojo.Project;
import org.gitlab.api.GitlabAPI;
import org.gitlab.api.models.CreateUserRequest;
import org.gitlab.api.models.GitlabProject;
import org.gitlab.api.models.GitlabUser;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;
import java.util.Map;

public class GitlabUtil {

    static String ROOT_TOKEN = null;
    static GitlabAPI gitlab = null;

    static {
        try {
            ROOT_TOKEN = createPrivateToken("http", "XXXXXX", "8929", "XXXXX", "XXXXXXXXX", "weblab", "2022-07-07");
        } catch (Exception e) {
            e.printStackTrace();
        }
        gitlab = GitlabAPI.connect("http://XXXXXXXX/", ROOT_TOKEN);
    }

    /**
     * 爬虫获取私钥
     * @param protocol 请求协议
     * @param host 地址
     * @param port 端口
     * @param username 用户名
     * @param password 密码
     * @param tokenName token名字
     * @param expireDate 过期时间
     * @return
     * @throws Exception
     */
    public static String createPrivateToken(String protocol, String host, String port, String username, String password, String tokenName, String expireDate) throws Exception {
        StringBuffer sb = new StringBuffer();
        sb.append(protocol);
        sb.append("://");
        sb.append(host);
        sb.append(":");
        sb.append(port);
        String baseLocation = sb.toString();
        // 登录页面
        String loginHtml = baseLocation + "/users/sign_in";
        Connection loginHtmlConn = Jsoup.connect(loginHtml);
        Connection.Response loginHtmlRes = loginHtmlConn.execute();
        Document loginHtmlResDoc = Jsoup.parseBodyFragment(loginHtmlRes.body());
        // 从网页中取到authentication
        String auth = loginHtmlResDoc.getElementById("new_user")
                .select("input")
                .get(0)
                .attr("value");
        // 拿到第一个cookie 登录用
        String _gitlab_session = loginHtmlRes.cookie("_gitlab_session");
        // 开始登录
        String loginApi = baseLocation + "/users/sign_in";
        Connection loginApiConn = Jsoup.connect(loginApi);
        // 设计请求参数
        loginApiConn.cookie("_gitlab_session", _gitlab_session);
        loginApiConn.data("user[login]", username);
        loginApiConn.data("user[password]", password);
        loginApiConn.data("user[remember_me]", "0");
        loginApiConn.data("authenticity_token", auth);
        // 使用post请求
        loginApiConn.method(Connection.Method.POST);
        Connection.Response loginApiRes = loginApiConn.execute();
        //得到登录状态的cookie
        Map<String, String> loginStatusCookie = loginApiRes.cookies();
        // 开始获取token
        String accessTokenHtml = baseLocation + "/-/profile/personal_access_tokens";
        Connection tokenHtmlConn = Jsoup.connect(accessTokenHtml);
        //设置登录状态的cookie
        tokenHtmlConn.cookies(loginStatusCookie);
        // 从网页中取出authentication
        Document accessTokenHtmlDoc = tokenHtmlConn.get();
        String authenticity_token = accessTokenHtmlDoc
                .getElementById("new_personal_access_token")
                .select("input")
                .get(0)
                .attr("value");
        //创建token并获取
        String accessTokenCreateApi = baseLocation + "/-/profile/personal_access_tokens";
        Connection accessTokenCreateApiConn = Jsoup.connect(accessTokenCreateApi);
        accessTokenCreateApiConn.cookies(loginStatusCookie);
        //设置token参数
        //token的名字
        accessTokenCreateApiConn.data("personal_access_token[name]", tokenName);
        // token过时间
        accessTokenCreateApiConn.data("personal_access_token[expires_at]", expireDate);
        // token有哪些权限
        accessTokenCreateApiConn.data("personal_access_token[scopes][]", "api");
        accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_api");
        accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_user");
        accessTokenCreateApiConn.data("personal_access_token[scopes][]", "read_repository");
        accessTokenCreateApiConn.data("personal_access_token[scopes][]", "write_repository");
        accessTokenCreateApiConn.data("authenticity_token", authenticity_token);
        // 设置请求为post
        accessTokenCreateApiConn.method(Connection.Method.POST);

        Connection.Response accessTokenCreateApiRes = accessTokenCreateApiConn.execute();
        Document accessTokenCreateApiDoc = accessTokenCreateApiRes.parse();
        String token = accessTokenCreateApiDoc
                .getElementById("created-personal-access-token")
                .attr("value");
        System.out.println(token);
        return token;
    }

    public static String getRootToken() {
        return ROOT_TOKEN;
    }

    /**
     * 创建一个gitlab用户
     * @param user
     * @return
     * @throws IOException
     */
    public static GitlabUser createGitlabUser(User user) throws IOException {
        CreateUserRequest info = new CreateUserRequest(user.getUsername(), user.getUsername(), user.getEmail());
        // 设置密码
        info.setPassword(user.getPassword());
        // 跳过邮箱验证
        info.setSkipConfirmation(true);
        GitlabUser gitlabUser = gitlab.createUser(info);
        return gitlabUser;
    }

    /**
     * 创建一个gitlab项目仓库
     * @param project
     * @return
     * @throws IOException
     */
    public static GitlabProject createGitlabProject(Project project) throws IOException {
        GitlabProject userProject = gitlab.createUserProject(project.getGitlabUserId(), project.getName(), project.getDescription(), "master", null, null, null, null, null, null, null);
        return userProject;
    }

    /**
     * 删除一个gitlab项目
     * @param projectId
     * @throws IOException
     */
    public static void deleteGitlabProject(Integer projectId) throws IOException {
        gitlab.deleteProject(projectId);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值