如果你的程序,需要访问github.com来克隆一些流行的开源项目的代码,但……你懂得的原因,经常无法访问,对于无法访问的用户,可以使用http的代理。但并不是每个用户都是无法访问的,如果所有人都用代理,效率就太低了。如何实时检测?
如果你正好使用js或ts,可参考或直接使用这个项目:
https://github.com/gucong3000/in-gfw/
https://www.npmjs.com/package/in-gfw
可惜它代码太老,在新版本的Node.js+ts的环境中难以正常运行。
在魔当(LM Downloader中) 项目中参考上面的项目,重写了这个功能。你可以用到你的项目中,能较好地兼容ts的编译环境。
以下是源码:
使用方法很简单,这个函数需要两个参数,第一个是可能被墙的国外网站,第二个是可在国内访问的网站,如果第一个被block,就会返回true:
const githubBlocked = await GFWCheckUtil.asyncCheck('https://github.com/', 'https://gitee.com/')
当然还可以检查其他网站,如:
// 判断google是否被block
const googleBlocked = await GFWCheckUtil.asyncCheck('https://www.google.com/', 'https://www.google.cn/')
// 判断huggingface是否被block,而替代者hf-mirror.com是否正常
const huggingfaceBlocked = await GFWCheckUtil.asyncCheck('https://huggingface.co/', 'https://hf-mirror.com/')