宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

文章首发:https://blog.itzhouq.cn/githubplus

加速方法

最近使用 GitHub 比较多,但是国内访问 GitHub 速度不理想,有的时候甚至不能访问。有没有什么办法加速访问 GitHub 呢?为了解决这个问题,我在网上搜集了一下资料,发现办法还挺多。总结起来大概有下面几种:

通过镜像访问

两个常见的地址:

https://github.com.cnpmjs.org

https://hub.fastgit.org

Github 加速下载

只要复制 GitHub 地址到输入框中即可代理下载。地址:

http://toolwa.com/github/

或者复制仓库地址到下面网址使用 git ssh 下载:

https://github.zhlh6.cn

GitHub 加速插件

插件名称:GitHub 加速

https://chrome.google.com/webstore/detail/github%E5%8A%A0%E9%80%9F/mfnkflidjnladnkldfonnaicljppahpg

Gitee 中转

将 GitHub 项目导入到 Gitee ,Gitee 是国内的,下载会快一些。

修改 Host 文件

国内域名解析的速度太慢,需要通过一些网站如 https://www.ipaddress.com/解析得到 IP。然后在主机中配置域名映射,跳过国内 DNS 解析。这里主要介绍这种方式。

通过修改 Host 加速

需要解析的网址:

github.githubassets.com
camo.githubusercontent.com
github.map.fastly.net
github.global.ssl.fastly.net
github.com
api.github.com
raw.githubusercontent.com
user-images.githubusercontent.com
favicons.githubusercontent.com

将上述每个地址复制到 “https://www.ipaddress.com/`中得到其真实的 IP 地址,类似这样。

将得到的 IP 和 域名组合得到映射文件

140.82.113.3 github.com
185.199.108.154 github.githubassets.com
185.199.109.154 github.githubassets.com
185.199.110.154 github.githubassets.com
185.199.111.154 github.githubassets.com
185.199.108.154 github.githubassets.com
185.199.109.154 github.githubassets.com
185.199.110.154 github.githubassets.com
185.199.111.154 github.githubassets.com
199.232.68.133 camo.githubusercontent.com
199.232.68.133 camo.githubusercontent.com
199.232.68.133 github.map.fastly.net
199.232.68.133 github.map.fastly.net
199.232.69.194 github.global.ssl.fastly.net
199.232.69.194 github.global.ssl.fastly.net
140.82.113.5 api.github.com
140.82.113.5 api.github.com
199.232.68.133 raw.githubusercontent.com
199.232.68.133 raw.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 favicons.githubusercontent.com
199.232.68.133 favicons.githubusercontent.com

修改 host 文件。

Mac / Linux :

通过下面命令修改

sudo vi /etc/hosts

Windows 用户通过管理员打开文件

C:WindowsSystem32driversetchosts

将上面的映射路径追加到 hosts 文件末尾。

刷新 DNS

大部分情况下是直接生效,如未生效可尝试下面的办法,刷新 DNS:

Linux 命令:sudo rcnscd restart

Mac 命令:sudo killall -HUP mDNSResponder

Windows:在 CMD 窗口输入:ipconfig /flushdns

到这里访问速度应该可以了。但是我想到一个问题,这些域名的地址可能会有变化。也就是说,可能过段时间我们访问的速度又慢了,我们又要去修改 host 文件。但是一个个手动获取域名然后做成映射文件,挺麻烦的。

于是我想到用程序实现批量获取 IP 做成映射文件。这里用 Java 实现。

批量获取 IP 组成映射文件

public static void main(String[] args) {
  ArrayList<String> result = new ArrayList<>();
  // 1. 创建一个HTTPClient对象
  CloseableHttpClient httpClient = HttpClients.createDefault();
  // 2. 设置URL遍历
  List<String> urls = Arrays.asList(
    "github.githubassets.com",
    "camo.githubusercontent.com",
    "github.map.fastly.net",
    "github.global.ssl.fastly.net",
    "github.com",
    "api.github.com",
    "raw.githubusercontent.com",
    "user-images.githubusercontent.com",
    "favicons.githubusercontent.com");
  urls.forEach(url -> {
    String domain = "";
    String[] splits = url.split("\.");
    for (int i = 0; i < splits.length; i++) {
      if (i == splits.length - 2) {
        domain += splits[i] + ".";
      }
      if (i == splits.length - 1) {
        domain += splits[i];
      }
    }
    // 3. 生成get请求
    // 模板: https://githubusercontent.com.ipaddress.com/camo.githubusercontent.com
    String getUrl = "https://" + domain + ".ipaddress.com/" + url;
    HttpGet httpGet = new HttpGet(getUrl);
    try {
      // 4. 执行得到返回结果
      CloseableHttpResponse response = httpClient.execute(httpGet);
      // 5. 解析
      if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String html = EntityUtils.toString(response.getEntity(), "utf-8");
        // 6. 使用jsoup解析
        Document document = Jsoup.parse(html);
        // 7. 获取链接
        Elements linkes = document.select("a[href]");
        for (Element link : linkes) {
          if (link.toString().contains("https://www.ipaddress.com/ipv4/")) {
            String res = link.text() + " " + url;
            result.add(res);
          }
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  });
  result.forEach(r -> System.out.println(r));
}

运行程序用到了 Jsoup 和 HTTPClient,需要导入依赖:

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.6</version>
</dependency>
<dependency>
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.10.2</version>
</dependency>

运行程序就可以在控制台得到结果。

185.199.108.154 github.githubassets.com
185.199.109.154 github.githubassets.com
185.199.110.154 github.githubassets.com
185.199.111.154 github.githubassets.com
185.199.108.154 github.githubassets.com
185.199.109.154 github.githubassets.com
185.199.110.154 github.githubassets.com
185.199.111.154 github.githubassets.com
199.232.68.133 camo.githubusercontent.com
199.232.68.133 camo.githubusercontent.com
199.232.68.133 github.map.fastly.net
199.232.68.133 github.map.fastly.net
199.232.69.194 github.global.ssl.fastly.net
199.232.69.194 github.global.ssl.fastly.net
140.82.114.6 api.github.com
140.82.114.6 api.github.com
199.232.68.133 raw.githubusercontent.com
199.232.68.133 raw.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 user-images.githubusercontent.com
199.232.68.133 favicons.githubusercontent.com
199.232.68.133 favicons.githubusercontent.com

如果哪个域名遗漏了再手动补上。

上面的方法都可以试试,哪种好用用哪种。