github加速

package com.yll.common;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.util.RuntimeUtil;
import cn.hutool.http.HttpUtil;
import org.jsoup.Jsoup;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Solve {

	public static final String STATIC_IP = "https://sites.ipaddress.com/assets-cdn.github.com/";
	public static final String DOMAIN = "https://sites.ipaddress.com/fastly.net/";
	public static final String IP = "https://sites.ipaddress.com/github.com/";
	public static final String DEFAULT_HOSTS = "C:\\Windows\\System32\\drivers\\etc\\HOSTS";
	public static final String BAK_HOSTS = "D:\\HOSTS";
	public static final String ADMIN = "@echo off\n"
			+ "%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cmd.exe\",\"/c %~s0 ::\",\"\",\"runas\",1)(window.close)&&exit\n"
			+ "cd /d \"%~dp0\"\n";
	private static final String MOVE = "MOVE %s %s";
	private static final String BEGIN = "######################GITHUB_BEGIN######################";
	private static final String END = "######################GITHUB_END########################";

	public static void main(String[] args) {
		try {
			System.out.println("=======================================");
			System.out.println("==========开始获取最新GitHub配置==========");
			System.out.println("=======================================");
			Map<String, List<String>> config = new TreeMap<>();
			//Key = github.com
			String ipHtml = HttpUtil.get(IP);
			String ip = Jsoup.parse(ipHtml).getElementById("tabpanel-dns-a").getElementsByTag("a").text();
			config.put("github.com", Collections.singletonList(ip));
			//Key = github.global.ssl.fastly.net
			String domainIpHtml = HttpUtil.get(DOMAIN);
			String domainIp = Jsoup.parse(domainIpHtml).getElementById("tabpanel-dns-a").getElementsByTag("a").text()
					.split(" ")[0];
			config.put("github.global.ssl.fastly.net", Collections.singletonList(domainIp));
			//Key = assets-cdn.github.com
			String staticResourceIpHtml = HttpUtil.get(STATIC_IP);
			String[] staticResourceIp = Jsoup.parse(staticResourceIpHtml).getElementById("tabpanel-dns-a")
					.getElementsByTag("a").text().split(" ");
			config.put("assets-cdn.github.com", Arrays.asList(staticResourceIp));
			config.forEach((k, v) -> v.forEach(val -> System.out.println(val + " " + k)));
			System.out.println("=======================================");
			System.out.println("==========获取最新GitHub配置完成==========");
			System.out.println("=======================================");
			System.out.println();
			Scanner scanner = new Scanner(System.in);
			showHost(scanner);
			System.out.println("是否写入host文件?(Y/N)");
			String next = scanner.next();
			List<String> latestHost = latestHost(config);
			if ("Y".equals(next)) {
				bakHost();
				File file = createHostFile(latestHost);
				moveHost(file);
			} else {
				return;
			}
			showHost(scanner);
		} catch (IORuntimeException | InterruptedException | IOException e) {
			e.printStackTrace();
		}
	}

	private static void showHost(Scanner scanner) {
		System.out.println("是否查看host文件?(Y/N)");
		String open = scanner.next();
		if ("Y".equals(open)) {
			RuntimeUtil.exec("rundll32 url.dll FileProtocolHandler file://" + DEFAULT_HOSTS);
		}
		System.out.println("是否打印host文件?(Y/N)");
		String print = scanner.next();
		if ("Y".equals(print)) {
			FileUtil.readLines(DEFAULT_HOSTS, StandardCharsets.UTF_8).forEach(System.out::println);
		}
	}

	private static void bakHost() {
		FileUtil.copy(new File(DEFAULT_HOSTS),new File(BAK_HOSTS+"-"+ new Date().getTime()+".bak"),true);
		System.out.println("已备份到目录(不覆盖):"+BAK_HOSTS);
	}

	private static void moveHost(File hosts) throws IOException, InterruptedException {
		System.out.println(">>开始将GitHub配置写入host文件");
		File file = FileUtil.writeString(ADMIN + String.format(MOVE, hosts, DEFAULT_HOSTS), "admin.bat",
				StandardCharsets.UTF_8);
		Process exec = RuntimeUtil.exec(file.getAbsolutePath());
		exec.waitFor();
		System.out.println(">>写入完毕!");
	}

	private static File createHostFile(List<String> latestHost) {
		return FileUtil.writeLines(latestHost, "HOSTS", StandardCharsets.UTF_8);
	}

	private static List<String> latestHost(Map<String, List<String>> config) {
		List<String> list = new ArrayList<>();
		List<String> hostConfigList = FileUtil.readLines(DEFAULT_HOSTS, StandardCharsets.UTF_8);
		int start = 0;
		int end = 0;
		for (int i = 0; i < hostConfigList.size(); i++) {
			if (hostConfigList.get(i).contains(BEGIN)) {
				start = i;
			}
			if (hostConfigList.get(i).contains(END)) {
				end = i;
				break;
			}
		}
		list.addAll(ListUtil.sub(hostConfigList, 0, start));
		list.addAll(ListUtil.sub(hostConfigList, end + 1, hostConfigList.size()));
		list.add(BEGIN);
		config.forEach((k, v) -> v.forEach(val -> list.add(val + " " + k)));
		list.add(END);
		return list;
	}
}


pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yll</groupId>
    <artifactId>enable_github</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.18</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.16.1</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>githubAccelerate</finalName><!-- 导出jar的名字 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.yll.Solve</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值