gddhy

_(:з」∠)_ 加载中...
  • 主页
  • 归档
  • 工具
  • 关于
所有文章 友链

gddhy

_(:з」∠)_ 加载中...

  • 主页
  • 归档
  • 工具
  • 关于

用Cloudflare Worker加速Github文件访问

2021-10-25
字数统计:363字 阅读时长≈1分

之前一直用jsDelivr来加速Github项目中的一些文件访问,最近发现用jsDelivr无法访问项目里的apk文件了,遂将目光转向Worker

在Cloudflare 里创建 Worker添加下面代码,测试ok后解析到域名就能用

目前满足使用需求,避免滥用写死了我自己的仓库

访问文件时,可选参数c是仓库,m是分支
https://res.gddhy.net/app/release/app-release.apk?c=coolapk-emotion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
const url = "https://raw.githubusercontent.com/gddhy/"

addEventListener("fetch", event => {
const str = event.request.url
var link = ""
var master = "master"
var cangku = "blog-res"
const inText = ".gddhy.net/"
if(str.indexOf(inText)>=0 ){
link = str.substring(str.indexOf(inText)+inText.length)
if(link.indexOf("?")>=0){
link = link.substring(0,link.indexOf("?"))
}
}

if(str.indexOf("?")>=0){
var data = str.substring(str.indexOf("?")+1)
cangku = getQueryVariable(data,"c",cangku)
master = getQueryVariable(data,"m",master)
}

link = url + cangku + "/" + master + "/" + link

return event.respondWith(handleRequest(link))
})

async function gatherResponse(response) {
const { headers } = response
const contentType = headers.get("content-type") || ""
if (contentType.includes("application/json")) {
return JSON.stringify(await response.json())
}
else if (contentType.includes("application/text")) {
return response.text()
}
else if (contentType.includes("text/html")) {
return response.text()
}
else {
return response.blob()
}
}

async function handleRequest(link) {
var lastChar = link.substring(link.length - 1)
if(lastChar.indexOf("/")>=0){
return new Response("ERROR", { status: 200 })
}

const init = {
headers: {
"content-type": "application/octet-stream",
},
}

const response = await fetch(link, init)
const results = await gatherResponse(response)
return new Response(results, init)
}

function getQueryVariable(data,variable,defaultData) {
var vars = data.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=")
if(pair[0] == variable){
return pair[1];
}
}
return defaultData;
}
赏

谢谢你请我吃糖果

微信

扫一扫,分享到微信

微信分享二维码
Android播放网络音频
屏蔽MIUI系统更新
目录,不存在的…
留言已关闭
:gddhy
© gddhy
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • Android
  • 软件分享
  • game
  • Hexo
  • JavaScript
  • 旧机博物馆
  • MIUI
  • Java
  • git
  • Termux
  • mtk
  • 原神
  • Win
  • Html
  • 安卓学习笔记

    缺失模块

  • Luminous' Home
  • 影子博客
  • 四次元领域
  • 初之音
  • Mr.Pumpkin
  • ZhaoQuinn 's Blog