64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
|
|
|||
|
// odd, 单日
|
|||
|
const SingleDay = 'aaa1.herokuapp.com'
|
|||
|
// even, 双日
|
|||
|
const DoubleDay = 'bbb2.herokuapp.com'
|
|||
|
// 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:'
|
|||
|
response = Response.redirect(url.href);
|
|||
|
event.respondWith( response );
|
|||
|
}
|
|||
|
let nd = new Date();
|
|||
|
if (nd.getDate()%2) {
|
|||
|
host = SingleDay
|
|||
|
} else {
|
|||
|
host = DoubleDay
|
|||
|
}
|
|||
|
if (!CFproxy) {
|
|||
|
url.hostname=host;
|
|||
|
let request=new Request(url,event.request);
|
|||
|
event.respondWith( fetch(request) )
|
|||
|
} else {
|
|||
|
event.respondWith( fetchAndApply(event.request) );
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
async function fetchAndApply(request) {
|
|||
|
let response = null;
|
|||
|
let url = new URL(request.url);
|
|||
|
url.host = host;
|
|||
|
|
|||
|
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', url.host);
|
|||
|
new_request_headers.set('Referer', request.url);
|
|||
|
|
|||
|
let original_response = await fetch(url.href, {
|
|||
|
method: method,
|
|||
|
body: body,
|
|||
|
headers: new_request_headers
|
|||
|
});
|
|||
|
|
|||
|
response = new Response(original_response.body, {
|
|||
|
status: original_response.status,
|
|||
|
headers: original_response.headers
|
|||
|
})
|
|||
|
|
|||
|
return response;
|
|||
|
}
|