-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【镜像站点搜集】 #116
Comments
感谢作者的贡献 |
感谢作者的贡献,分流: |
https://www.ten-year.link/ |
我的https://ghproxy.cc/ 美国G口机器 |
感谢作者的贡献 |
原来是你啊,我在google搜到了一直用的你的 |
好像现在有点问题了,访问不了 |
google还能搜到我的嘛 我之前自己都搜不到 你咋搜的哈哈哈哈 感谢支持
|
再次总结一下我的 昨天已订阅Cloudflare付费计划 一个月有1000万调用次数 昨天新注册了域名ghproxy.cn |
老哥 你这种UI的是怎么实现的了? |
我自己写的前端页面 托管在静态站 |
[toc] abstract
powershell 脚本内容
[CmdletBinding()]
param(
$Mirrors = $GithubMirrors,
$ThrottleLimits = 16,
$TimeOutSec = 3,
[switch]$ListView,
[switch]$PassThru,
[switch]$SkipCheckAvailability,
# 是否启用线性试探镜像可访问性(默认是并行试探)
[switch]$Linearly,
# First是为串行测试准备的,对于并行测试,是多余的参数
[parameter(ParameterSetName = 'First')]
$First = 5,
[parameter(ParameterSetName = 'All')]
[Alias('Full')]
[switch]
$All
)
$GithubMirrors = @(
# 注意,如果你的浏览器使用了代理,那么部分镜像站会和代理冲突,所以可能命令行中测试可以访问的链接在浏览器中确打不开镜像站,可以关闭代理或换个浏览器后重新验证该镜像站的可用性
#搜集到的链接可以用gpt进行修改,将链接包裹引号(指令:为这些链接分别添加引号);或者自己粘贴到文件文件中然后编写脚本转换为数组格式
'https://github.moeyy.xyz', # Moeyy - 提供 GitHub 文件的加速下载功能
'https://ghproxy.cc',
'https://ghproxy.net', # GitHub Proxy by GitHub99 - 提供 GitHub 文件的加速下载和克隆服务 #和用户自己的代理可能发生冲突
'https://mirror.ghproxy.com',
# 'https://ghproxy.com/bad/demo', #虚假镜像,用来测试代码是否能够正确处理不可用的镜像链接
'https://ghproxy.homeboyc.cn/',
'https://gh-proxy.com/',
'https://gh.ddlc.top',
'https://github.ur1.fun/',
'' #空字符串收尾
)
$GithubMirrorsTest = @(
'https://gh-proxy.com/',
'https://ghps.cc/',
'https://ghproxy.net/',
'https://github.moeyy.xyz/',
'https://gh.ddlc.top/',
'https://slink.ltd/',
'https://gh.con.sh/',
'https://hub.gitmirror.com/',
'https://sciproxy.com/',
'https://cf.ghproxy.cc/',
'https://gh.noki.icu/',
''#收尾
)
$GithubMirrors = $GithubMirrors + $GithubMirrorsTest
$GithubMirrors = $GithubMirrors | Where-Object { $_ }#移除空串
$GithubMirrors = $GithubMirrors | ForEach-Object { $_.trim('/') } | Sort-Object #统一链接风格(去除末尾的`/`如果有的话)
$GithubMirrors = $GithubMirrors | Get-Unique #移除重复条目
function Test-LinksLinearly
{
<#
.SYNOPSIS
线性地(串行地)测试链接是否能够在指定时间内响应,为powershell5 设计
.NOTES
链接数量多的话会造成测试时间很长,尽量使用并行方案(pwsh7),或者考虑设置小的$timeoutSec=1
#>
[cmdletbinding(DefaultParameterSetName = 'First')]
param (
$Mirrors = $GithubMirrors,
$TimeOutSec = 4,
[parameter(ParameterSetName = 'First')]
$First = 5,
[parameter(ParameterSetName = 'All')]
[Alias('Full')]
[switch]
$All
)
$availableMirrors = @()
foreach ($mirror in $Mirrors)
{
# $Mirrors | ForEach-Object {
# $mirror = $_
# Write-Verbose "Testing $mirror..."
if (Test-MirrorAvailability -Url $mirror -TimeoutSec $TimeOutSec)
{
Write-Verbose "$mirror is available "
Write-Host "`t $mirror" -ForegroundColor Green
# 插入到数组中(这里如果foreach用了-parallel,就会导致无法访问外部的$availableMirros)
$availableMirrors += $mirror
}
else
{
Write-Verbose "$mirror is not available "
Write-Host "`t $mirror " -ForegroundColor Red
}
if ($pscmdlet.ParameterSetName -eq 'First')
{
if (($availableMirrors.Count -ge $First))
{
break #在foreach-object中会直接停止函数的运行,而使用传统foreach则是正常的
}
}
}
if ($availableMirrors.Count -eq 0)
{
throw 'No mirrors are available!'
}
return $availableMirrors
}
function Test-LinksParallel
{
<#
.SYNOPSIS
为powershell 7+设计的并行测试链接是否能够在指定时间内响应
#>
[CmdletBinding()]
param (
$Mirrors = $GithubMirrors,
$TimeOutSec = 2,
$ThrottleLimits = 16
# $First = 5
)
# 如果不是powershell 7报错
if ($host.Version.Major -lt 7)
{
Throw 'PowerShell 7 or higher is required to run parallel foreach!'
# return
}
$availableMirrors = @()
# 为了能够让$TimeOutSec能够被传递到子进程,这里使用了$env:来扩大其作用域
# $env:TimeOutSec = $TimeOutSec
# powershell提供了更好的方式访问并行scriptblock外的变量,使用$using: 这个关键字
#然而这个关键字引用的变量无法更改(只读),可以考虑用.Net线程安全容器,或者用$env:来实现共享局部环境变量
# $Envbak = $env:StopLoop
# $env:StopLoop = 0
# 创建线程安全容器(队列)
$mirs = [System.Collections.Concurrent.ConcurrentQueue[Object]]::new()
# $mirs.Enqueue('First_Demo')
# Write-Host $mirs
# 并行执行链接测试
$Mirrors | ForEach-Object -Parallel {
# if ([int]$env:StopLoop)
# {
# return
# }
# Write-verbose $_
#引用外部变量,并且赋值给简化的临时变量,方便后续引用(直接在-Parallel中引用外部变量是不合期望的)
$mirs = $using:mirs
$TimeOutSec = $using:TimeOutSec
# $First = $using:First
# 并行方案里用First参数指定前n个意义不大,而且会让代码变得复杂
# Write-Verbose "mirs.cout=$($mirs.Count)" -Verbose
# if ($mirs.Count -ge $First)
# {
# # Write-Host $First
# Write-Verbose "The available links enough the $First !" -Verbose
# return
# }
$mirror = $_
# Write-Debug "`$TimeOutSec=$env:TimeOutSec" -Debug #parallel 参数$DebugPreference无法起作用
# if (Test-MirrorAvailability -Url $mirror -TimeoutSec $env:TimeOutSec)
# 测试链接是否可用
if (Test-MirrorAvailability -Url $mirror -TimeoutSec $TimeOutSec)
{
Write-Verbose "TimeOutSec=$TimeOutSec" # -Verbose
Write-Host "`t $_" -ForegroundColor Green
# Write-Output $mirror
#写入队列
$mirs.Enqueue($mirror)
# 查看$mirs队列长度
# $mirs.Count, $mirs
}
else
{
Write-Verbose "$mirror is not available "
Write-Host "`t $mirror." -ForegroundColor Red
}
} -ThrottleLimit $ThrottleLimits
$availableMirrors = $mirs #.ToArray()
if ($availableMirrors.Count -eq 0)
{
throw 'No mirrors are available!'
}
return $availableMirrors
}
function Test-MirrorAvailability
{
<#
.SYNOPSIS
测试指定链接是否在规定时间内相应
.NOTES
此函数主要用来辅助Test-LinksLinearly和Test-LinksParallel调用
.DESCRIPTION
如果及时正确相应,将链接打印为绿色,否则打印为红色
#>
[CmdletBinding()]
param (
[string]$Url,
$TimeoutSec = 3
)
try
{
# 使用 Invoke-WebRequest 检查可用性
$response = Invoke-WebRequest -Uri $Url -Method Head -TimeoutSec $TimeOutSec -ErrorAction Stop
$availability = $response.StatusCode -eq 200
}
catch
{
$availability = $false
}
if ($VerbosePreference)
{
if ($availability)
{
Write-Host "Mirror $Url is available" -ForegroundColor Green
}
else
{
Write-Host "Mirror $Url is not available" -ForegroundColor Red
}
}
return $availability
}
function Get-AvailableGithubMirrors
{
<#
.SYNOPSIS
列出流行的或可能可用的 GitHub 加速镜像站。
列表中的镜像站可能会过期,可用性不做稳定性和可用性保证。
.DESCRIPTION
这里采用了多线程的方式来加速对不同镜像链接的可用性进行检查
并且更容易获取其中相应最快的可用的镜像站,这是通过串行检查无法直接达到的效果
.EXAMPLE
.NOTES
推荐使用 aria2 等多线程下载工具来加速下载,让镜像加速效果更加明显。
.LINK
# 镜像站搜集和参考
https://github-mirror.us.kg/
https://github.com/hunshcn/gh-proxy/issues/116
#>
[CmdletBinding()]
param(
$Mirrors = $GithubMirrors,
$ThrottleLimits = 16,
$TimeOutSec = 3,
[switch]$ListView,
[switch]$PassThru,
[switch]$SkipCheckAvailability,
# 是否启用串行地试探镜像可访问性(默认是并行试探)
[switch]
# [parameter(ParameterSetName = 'Serial')]
[Alias('Serial')]$Linearly,
# [parameter(ParameterSetName = 'Serial')]
$First = 5
)
# 检查镜像站的可用性
Write-Host 'Checking available Mirrors...'
$availableMirrors = $Mirrors
# 检查可用的镜像列表
if (!$SkipCheckAvailability)
{
$psVersion = $host.Version.Major
# 默认尝试并行测试
if ($psVersion -lt 7 -and !$Linearly)
{
Write-Host 'PowerShell 7 or higher is required to run parallel foreach!' -ForegroundColor Red
Write-Host 'Testing Links Linearly...'
$Linearly = $true
}
if ($Linearly ) #-or $PSVersion -lt 7
{
$availableMirrors = Test-LinksLinearly -Mirrors $Mirrors -TimeOutSec $TimeOutSec -First $First -Verbose:$VerbosePreference
}
else
{
$availableMirrors = Test-LinksParallel -Mirrors $Mirrors -TimeOutSec $TimeOutSec -ThrottleLimits $ThrottleLimits -Verbose:$VerbosePreference
}
}
# Start-Sleep $TimeOutSec
# 显示可用的镜像
Write-Host "`nAvailable Mirrors:"
# 空白镜像保留(作为返回值)
$availableMirrors = @('') + $availableMirrors
# 按序号列举展示
Write-Host ' 0: Use No Mirror' -NoNewline
$index = 1
$availableMirrors | ForEach-Object {
# $index = [array]::IndexOf($availableMirrors, $_)
# if($availableMirrors[$index] -eq ""){continue}
if ($_.Trim())
{
Write-Host " ${index}: $_" -NoNewline
$index += 1
}
Write-Host ''
}
if ($PassThru)
{
return $availableMirrors
}
}
function Get-SelectedMirror
{
[CmdletBinding()]
param (
$Default = 1, # 默认选择第一个(可能是响应最快的)
[switch]$Linearly,
[switch]$Silent # 是否静默模式,不询问用户,返回第$Default个链接($Default默认为1)
)
$Mirrors = Get-AvailableGithubMirrors -PassThru -Linearly:$Linearly
if (!$Silent)
{
# 交互模式
$numOfMirrors = $Mirrors.Count
$range = "[0~$($numOfMirrors-1)]"
$num = Read-Host -Prompt "Select the number of the mirror you want to use $range ?(default: $default)"
# $mirror = 'https://mirror.ghproxy.com'
$n = $num -as [int] #可能是数字或者空$null
if ($VerbosePreference)
{
Write-Verbose "`$n=$n"
Write-Verbose "`$num=$num"
Write-Verbose "`$numOfMirrors=$numOfMirrors"
}
# 如果输入的是空白字符,则默认设置为0
if ( $num.trim().Length -eq 0)
{
Write-Host 'choose the Default 1'
$n = $default
}
elseif ($n -notin 0..($numOfMirrors - 1))
{
Throw " Input a number within the range! $range"
}
}
else
{
$n = $default
}
if ($n -gt 0)
{
# 用户选择了一个合法的镜像代号(0表示不使用镜像)
Write-Host "Selected mirror:[$n : " -NoNewline
Write-Host "$($Mirrors[$n])" -BackgroundColor Gray -NoNewline
Write-Host ']'#打印一个空行
}
$mirror = $Mirrors[$n]
return $mirror
}
Get-AvailableGithubMirrors -ThrottleLimits $ThrottleLimits `
-TimeOutSec $TimeOutSec -PassThru:$PassThru -SkipCheckAvailability:$SkipCheckAvailability `
-Linearly:$Linearly -First $First
使用示例PS> .\GetMirrors.ps1 -PassThru -TimeOutSec 5 #参数补全列表
Mirrors TimeOutSec SkipCheckAvailability
ThrottleLimits ListView Linearly
默认使用并行检查,需要powershell7+
线性检查(支持powershell v5) 这里指定找出2个可用链接就结束查找(默认找5个) PS C:\Users\cxxu\Desktop> .\TL.ps1 -Linearly -First 2
Checking available Mirrors...
https://cf.ghproxy.cc
https://gh.con.sh
Available Mirrors:
0: Use No Mirror
1: https://cf.ghproxy.cc
2: https://gh.con.sh powershell5中不指定
|
巧了,我之前也写过差不多的。保存为 <!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8">
<title>Github 镜像加速节点测试</title>
<style>
img {
width: 64px;
height: 64px;
}
* {
font-family: "JetBrains Mono", source-code-pro, "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji', monospace;
}
</style>
</head>
<body>
<h3>Github 镜像加速节点测试</h3>
<div><textarea id="ipt-mirrors" rows="10" cols="50" placeholder="输入镜像地址,每行一个">
https://github.moeyy.xyz
https://ghproxy.net
https://gh-proxy.com
https://gh-proxy.llyke.com
https://gh.cache.cloudns.org
https://gh.ddlc.top
https://slink.ltd
https://gh.con.sh
https://sciproxy.com
https://cf.ghproxy.cc
https://ghproxy.cn
https://ghproxy.cc
https://gh.jiasu.in
https://mirror.ghproxy.com
https://hub.gitmirror.com
https://ghps.cc
https://ghproxy.org
https://ghproxy.top
https://gh.ezctrl.cn
https://gh.sixyin.com
https://gh.bink.cc
https://gh.noki.icu
</textarea></div>
<div>
<button id="btn-test-all">测试全部</button>
<button id="btn-get-fastest">获取最快</button>
</div>
<div id="div-output"></div>
</body>
<script>
const ipt_mirrors = document.getElementById('ipt-mirrors')
const btn_test_all = document.getElementById('btn-test-all')
const btn_get_fastest = document.getElementById('btn-get-fastest')
const div_output = document.getElementById('div-output')
const testAllMirror = async (mirrors) => {
return Promise.allSettled(mirrors.map((mirror) => {
if (!mirror.endsWith('/')) mirror += '/'
return new Promise((resolve, reject) => {
const imgElm = document.createElement('img')
imgElm.alt = mirror
imgElm.title = mirror
imgElm.onload = resolve
imgElm.onerror = reject
imgElm.src = `${mirror}https://raw.githubusercontent.com/pansong291/Pictures/master/watermark/success.svg?t=${Date.now()}`
div_output.append(imgElm)
})
}))
}
const findMirror = async (mirrors) => {
const xhrs = mirrors.map((mirror) => {
if (!mirror.endsWith('/')) mirror += '/'
const xhr = new XMLHttpRequest()
xhr._mirror = mirror
xhr.open('GET', `${mirror}https://raw.githubusercontent.com/pansong291/Pictures/master/test.png?t=${Date.now()}`)
return xhr
})
const promises = xhrs.map((xhr) => new Promise((resolve, reject) => {
xhr.addEventListener('abort', reject)
xhr.addEventListener('error', reject)
xhr.addEventListener('timeout', reject)
xhr.addEventListener('load', (e) => resolve(e.target?._mirror))
xhr.send()
}))
let fastest = null
try {
fastest = await Promise.any(promises)
xhrs.forEach((xhr) => xhr.abort())
} catch (e) {
console.error('all failed', e)
}
return fastest
}
const getMirrors = () => ipt_mirrors.value.split(/\s+/).filter((it) => !!it)
const setButtonDisabled = (disabled) => {
if (disabled) {
btn_test_all.setAttribute('disabled', 'disabled')
btn_get_fastest.setAttribute('disabled', 'disabled')
} else {
btn_test_all.removeAttribute('disabled')
btn_get_fastest.removeAttribute('disabled')
}
}
btn_test_all.addEventListener('click', () => {
setButtonDisabled(true)
div_output.innerText = ''
testAllMirror(getMirrors()).then(() => {
const pElm = document.createElement('p')
pElm.innerText = '测试结束'
div_output.append(pElm)
setButtonDisabled(false)
})
})
btn_get_fastest.addEventListener('click', () => {
setButtonDisabled(true)
div_output.innerText = ''
findMirror(getMirrors()).then((mirror) => {
const pElm = document.createElement('p')
pElm.innerText = mirror || '全部失败'
div_output.append(pElm)
setButtonDisabled(false)
})
})
</script>
</html> |
@pansong291 也挺方便的,我原本是在windows上使用scoop,希望整合为一个国内加速版的scoop 软件安装器部署脚本,现在我的电脑上70%的软件通过scoop安装(感谢spc这个bucket项目) |
纯小白写了一个通过服务器中转下载文件和docker镜像的项目,支持docker一键部署,欢迎大佬一起pr优化 |
bash版连接测试,16并发,共132个,可用99个(电信) script#!/usr/bin/env bash
set -e
test_ghproxy() {
local list=(
101.32.202.184:10086
101.43.36.238:4080
111.229.117.180:2068
111.229.21.57:12345
119.28.4.250
124.156.150.245:10086
124.156.158.242:4000
124.223.88.224:12345
13.230.117.137:8008
130.162.130.196
136.243.215.211:12345
138.2.123.193:8090
138.2.54.229:12580
138.2.69.119:30001
139.196.123.118:12345
140.238.17.136:9980
140.238.33.157:3000
141.147.170.49
150.138.79.19:12345
152.67.215.236:12345
152.67.215.57:8081
152.67.219.235:8989
152.70.36.140:88
152.70.94.22:9080
154.23.187.126
155.248.180.127:3000
158.101.152.90:8123
158.180.92.175:8000
16.163.43.131:880
212.50.233.214:8888
38.207.160.46:6699
42.193.4.156:8880
43.129.191.251:8088
43.132.131.30:9999
43.132.227.252:9090
43.133.162.210:9000
43.154.105.8:8888
43.154.123.246
43.154.99.97:1112
43.163.230.97:800
45.149.156.201:7080
47.109.58.212:8082
47.236.114.62:18080
47.245.88.61
47.75.211.166:5080
47.95.0.182:2333
51.195.241.253:8080
74.48.108.189:10088
8.210.13.120
8.210.153.246:9000
8.210.207.225:8888
82.157.146.148:9001
94.74.100.230:9010
a.whereisdoge.work
admin.whereisdoge.work
autodiscover.whereisdoge.work
blog.whereisdoge.work
c0b0109d9439de57fe3c.ljw.ink
cdn.moran233.xyz
cf.ghproxy.cc
cloud.whereisdoge.work
cpanel.whereisdoge.work
cpcalendars.whereisdoge.work
cpcontacts.whereisdoge.work
dev.xvzhenduo.topgh-proxy
free.cn.eu.org
g.blfrp.cn
gh-proxy.com
gh-proxy.llyke.com
gh.222322.xyz
gh.6yit.com
gh.bink.cc
gh.cache.cloudns.org
gh.catmak.name
gh.chaoyi996.com
gh.con.sh
gh.ddlc.top
gh.ezctrl.cn
gh.hlg.us.kg
gh.jiasu.in
gh.noki.eu.org
gh.noki.icu
gh.nxnow.top
gh.pylas.xyz
gh.qninq.cn
gh.sixyin.com
gh.xx9527.cn
ghp.arslantu.xyz
ghp.ci
ghp.miaostay.com
ghpr.cc
ghproxy.cc
ghproxy.cianogame.top
ghproxy.cn
ghproxy.friendsa.onflashdrive.app
ghproxy.homeboyc.cn
ghproxy.lainbo.com
ghproxy.mengluowusheng.workers.dev
ghproxy.net
ghproxy.org
ghproxy.top
ghps.cc
git.19970301.xyz
git.40609891.xyz
git.669966.xyz
github.iaor.asia
github.moeyy.xyz
github.muou666.com
github.ur1.fun
github.yeqingg.cn
githubapi.jjchizha.com
githubmirrors.iaor.asia
githubproxy.iaor.asia
gp.zkitefly.eu.org
hub.gitmirror.com
m.whereisdoge.work
mail.whereisdoge.work
mirror.ghproxy.com
mtp.whereisdoge.work
ql.133.info
sciproxy.com
slink.ltd
v.whereisdoge.work
webdav.camus.xyz
webdisk.whereisdoge.work
www.ghpr.cc
www.subook.link:88
www.ten-year.link
x.whereisdoge.work
xxqg.168828.xyz:8088
y.whereisdoge.work
zipchannel.top:4000
)
for proxy in ${list[@]}; do
(
local url=http://$proxy/https://raw.githubusercontent.com/LSPosed/LSPosed/refs/heads/master/app/.gitignore
local length=$(curl -s -L -m10 $url | wc -c)
if [[ $length == 7 ]]; then
echo $proxy
fi
) &
while [[ $(jobs | wc -l) -ge 16 ]]; do
sleep 0.1
done
done
wait
}
test_proxy 可用101.32.202.184:10086
101.43.36.238:4080
111.229.117.180:2068
119.28.4.250
124.156.150.245:10086
124.156.158.242:4000
13.230.117.137:8008
130.162.130.196
136.243.215.211:12345
138.2.123.193:8090
138.2.54.229:12580
138.2.69.119:30001
139.196.123.118:12345
140.238.17.136:9980
140.238.33.157:3000
141.147.170.49
150.138.79.19:12345
152.67.215.236:12345
152.67.215.57:8081
152.67.219.235:8989
152.70.36.140:88
152.70.94.22:9080
155.248.180.127:3000
158.101.152.90:8123
158.180.92.175:8000
16.163.43.131:880
212.50.233.214:8888
38.207.160.46:6699
43.129.191.251:8088
43.132.227.252:9090
43.133.162.210:9000
43.154.105.8:8888
43.154.123.246
43.154.99.97:1112
43.163.230.97:800
45.149.156.201:7080
47.109.58.212:8082
47.236.114.62:18080
47.245.88.61
47.75.211.166:5080
47.95.0.182:2333
51.195.241.253:8080
74.48.108.189:10088
8.210.13.120
8.210.153.246:9000
8.210.207.225:8888
82.157.146.148:9001
94.74.100.230:9010
a.whereisdoge.work
admin.whereisdoge.work
autodiscover.whereisdoge.work
blog.whereisdoge.work
cdn.moran233.xyz
cf.ghproxy.cc
cloud.whereisdoge.work
cpanel.whereisdoge.work
cpcalendars.whereisdoge.work
cpcontacts.whereisdoge.work
g.blfrp.cn
gh-proxy.com
gh-proxy.llyke.com
gh.222322.xyz
gh.6yit.com
gh.catmak.name
gh.con.sh
gh.nxnow.top
gh.pylas.xyz
gh.sixyin.com
gh.xx9527.cn
ghp.arslantu.xyz
ghp.ci
ghp.miaostay.com
ghpr.cc
ghproxy.cc
ghproxy.cianogame.top
ghproxy.cn
ghproxy.homeboyc.cn
ghproxy.lainbo.com
ghps.cc
git.19970301.xyz
git.40609891.xyz
git.669966.xyz
github.moeyy.xyz
github.muou666.com
hub.gitmirror.com
m.whereisdoge.work
mail.whereisdoge.work
mirror.ghproxy.com
mtp.whereisdoge.work
ql.133.info
slink.ltd
v.whereisdoge.work
webdav.camus.xyz
webdisk.whereisdoge.work
www.ghpr.cc
x.whereisdoge.work
xxqg.168828.xyz:8088
y.whereisdoge.work
zipchannel.top:4000 |
感谢作者的贡献 |
因为演示站确实无法保证可用性,24小时的额度基本16小时就会用完,但是需求也确实有。
可以在本帖附上愿意被索引的镜像站点。
先贴俩比较大的
也感谢镜像站的维护者们,非 worker 版本成本还是不低的。
镜像站可能会由于各种原因禁止部分地址访问,这很合理也很正常。所以,一希望开发者合理配置访问频次,尤其是一些分发量大的项目,二请不要由于访问原因开 issue 了。
The text was updated successfully, but these errors were encountered: