diff --git a/CFWorkers.js b/CFWorkers.js deleted file mode 100644 index 8d3084c..0000000 --- a/CFWorkers.js +++ /dev/null @@ -1,90 +0,0 @@ - -// odd, 单日 -const SingleDay = 'https://aaa1.herokuapp.com' -// even, 双日 -const DoubleDay = 'https://bbb2.herokuapp.com' - -//const SingleDay = 'https://153xxxxx0.cn-hongkong.fc.aliyuncs.com/2016-08-15/proxy/onedrive/xxx/' -//const DoubleDay = 'https://153xxxxx0.cn-hongkong.fc.aliyuncs.com/2016-08-15/proxy/onedrive/xxx/' - -// CF proxy all, 一切给CF代理,true/false -const CFproxy = true - -// Used in cloudflare workers, odd or even days point to 2 heroku account. - -// 由于heroku不绑卡不能自定义域名,就算绑卡后https也不方便 -// 另外免费套餐每月550小时,有些人不够用 -// 于是在CF Workers使用此代码,分单双日拉取不同heroku帐号下的相同网页 -// 只改上面,下面不用动 - -addEventListener('fetch', event => { - let url=new URL(event.request.url); - if (url.protocol == 'http:') { - url.protocol = 'https:' - event.respondWith( Response.redirect(url.href) ) - } else { - let response = null; - let nd = new Date(); - if (nd.getDate()%2) { - host = SingleDay - } else { - host = DoubleDay - } - if (host.substr(0, 7)!='http://'&&host.substr(0, 8)!='https://') host = 'http://' + host; - - response = fetchAndApply(host, event.request); - - event.respondWith( response ); - } -}) - -async function fetchAndApply(host, request) { - let f_url = new URL(request.url); - let a_url = new URL(host); - let replace_path = a_url.pathname; - if (replace_path.substr(replace_path.length-1)!='/') replace_path += '/'; - let replaced_path = '/'; - let query = f_url.search; - let path = f_url.pathname; - if (host.substr(host.length-1)=='/') path = path.substr(1); - f_url.href = host + path + query; - - let response = null; - if (!CFproxy) { - response = await fetch(f_url, request); - } else { - let method = request.method; - let body = request.body; - let request_headers = request.headers; - let new_request_headers = new Headers(request_headers); - new_request_headers.set('Host', f_url.host); - new_request_headers.set('Referer', request.url); - - response = await fetch(f_url.href, { - method: method, - body: body, - headers: new_request_headers - }); - } - - let out_headers = new Headers(response.headers); - if (out_headers.get('Content-Disposition')=='attachment') out_headers.delete('Content-Disposition'); - let out_body = null; - let contentType = out_headers.get('Content-Type'); - if (contentType.includes("application/text")) { - out_body = await response.text(); - while (out_body.includes(replace_path)) out_body = out_body.replace(replace_path, replaced_path); - } else if (contentType.includes("text/html")) { - out_body = await response.text(); - while (replace_path!='/'&&out_body.includes(replace_path)) out_body = out_body.replace(replace_path, replaced_path); - } else { - out_body = await response.body; - } - - let out_response = new Response(out_body, { - status: response.status, - headers: out_headers - }) - - return out_response; -}