栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

maven依赖
 
        

        
            org.gitlab
            java-gitlab-api
            4.1.1
            
                
                    org.slf4j
                    slf4j-api
                

            
        

        
        
            org.jsoup
            jsoup
            1.10.2
        

封装工具类
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);
    }

    
    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 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;
    }

    
    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;
    }

    
    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;
    }

    
    public static void deleteGitlabProject(Integer projectId) throws IOException {
        gitlab.deleteProject(projectId);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/959581.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号