GitHub Proxy 更新 支持在一行内 wget 下载再执行的形式

现象

一直以来, 在各种地方不断地看到在不同的环境下跑Github脚本不成功的网友.

有些一键脚本的作者为了美观(装B)会带上不显示错误信息的参数, 比如 wget -qcurl -s

这样, 如果出错就一点显示都没有. 对不懂的小白来说, 连用微信扫一扫翻译错误信息的机会都没有.

比如, 这位仁兄



出错的原因

可能是Github访问不通 (在有些NAT鸡或IPv6鸡的环境下出现), 

可能是Github的API接口访问次数过多 (一般在脚本查询最新版本的地方容易出现. 原因常常是, 为了解决上一个问题, 装了WARP, 然后从WARP的这条路去访问Github的人太多了)

解决方案

我思考的解决方案就是换一条路去访问Github. 

比如, Cloudflare理应是一个在全世界很多地方都可以顺利访问的网络资源, 那么我们在Cloudflare的worker上面搭建这样的Github Proxy.

考虑到国内网络的情况, 我发现 Replit 的域名没被墙, 我又写了一篇在Replit上面搭建这样的Github Proxy.

Feedback

以前我还考虑到会有Github脚本调用Github脚本的嵌套调用的情况, 所以我只考虑了处理类似 bash <( curl xxxx.sh) 的形式. 而且我觉得每次都从服务器获取最新的脚本, 这样不会遗留BUG.

我也在一些TG群里解答问题时顺带表达过这样的思考. 不过, 看上去大家不怎么接受.

有些一键脚本的作者考虑到 wget 的形式会保存一份脚本文件在VPS上, 这样下次就不需要又下载一次了, 直接跑保存好的脚本就行了. 就会使用先 wget 下载, 然后执行脚本的形式.

比如:

wget -O tcpx.sh "https://git.io/JYxKU" && chmod +x tcpx.sh && ./tcpx.sh
wget -N --no-check-certificate https://raw.githubusercontent.com/Misaka-blog/hysteria-install/main/hy2/hysteria.sh && bash hysteria.sh

那么我想, 好吧, 如果不考虑嵌套调用的情况; 不考虑 wget 再执行写成多行的情况; 就还是可以处理的.

具体实践

对于 bash <( curl xxx.sh)bash <( wget -O- xxx.sh) 的情况

// 正则表达式
regex1 = /(bash.*?)(https?:\/\/.*?)(\).*)/s;
// 只处理一层Github脚本
// 替换表达式
replacement2 = '$1' + ghproxy + '$2' + ' | perl -pe "s#(http.*?git[^/]*?/)#' + ghproxy + '\\1#g"' + '$3';
// 处理后的结果
resultStr2 = inputStr.replace(regex1, replacement2);

对于 wget xxx.sh && bash xxx.shwget xxx.sh && chmod +x xxx.sh && ./xxx.sh 的情况

// 正则表达式
regex2 = /(wget.*?)(https?:\/\/.*)(&&[^&]*[ /])(.*?sh)/s;
// 只处理一层Github脚本
// 替换表达式
replacement3 = '$1' + ghproxy + '$2' + '&& perl -i -pe "s#(http.*?git[^/]*?/)#' + ghproxy + '\\1#g" ' + '$4 $3$4';
// 处理后的结果
resultStr2 = inputStr.replace(regex2, replacement3);

========

完 

更新到Github: https://github.com/crazypeace/gh-proxy

欢迎试用: 

https://ghproxy.crazypeace.workers.dev/

https://ghproxy.agrayman.gay/ (这个是cloudflare worker套的域名)

https://ghproxy.crazypeace.repl.co/

https://ghproxy--crazypeace.repl.co/

========

update

如果在 Replit 上跑, 然后又用wget, 会出现错误乱码的现象. 解决办法是带 --compression=auto 参数


评论

The Hot3 in Last 30 Days

ClouDNS .asia免费域名 托管到CloudFlare开CDN白嫖Websocket WS通道翻墙 / desec.io

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程