網站下載鏈接直接是xxx.com/abc.jpg,沒有302跳到微軟xxx.sharepoint.com,也沒有反代xxx.sharepoint.com那樣後麵一長串。
準備工作:
1, Onedrive,或Sharepoint
這個大家有的,各種A1,E3,E5,世紀。(Sharepoint默認25T)
2, OneManager,Github地址:https://github.com/qkqpttgf/OneManager-php
基於各種無服務器的平台,比如Heroku、騰訊SCF、阿裏FC、華為FG、百度CFC,配置都保存在其環境變量中,當然也可以裝在VPS與空間裏,不過為了一致,程序不固定儲存onedrive的目錄結構,緩存最多1小時
3, Heroku,最好需要注冊2個帳號,注冊與登錄時需要魔法,平時操作時不需要
OneManager配置是保存在環境變量中的,所以不需要一直監控保活,Heroku免費套餐每月550小時,550小時/30天=18.33小時,每天隻要訪問時間段空出來24-18=6小時沒有人訪問,這一個月其實就足夠使用了,但有些人的網站可能訪問人比較多所以還沒到月底就用光了。
當然,heroku也可綁卡達到1000小時,同時還能自定義域名。但,SSL卻比較麻煩。
4, CF workers,免費的就好
部署程序、安裝程序、綁定網盤:
1, 將OneManager一鍵部署到Heroku
2, 訪問給定的herokuapp域名,正式安裝好程序
3, 安裝好後登錄,在設置中綁定Onedrive或Sharepoint
4, 在設置中做些設定
5, 換一個Heroku帳號再安裝一次(時長夠用就無所謂)
重點:
在CF Workers中填入以下代碼
// 單日
const SingleDay = '111.herokuapp.com'
// 雙日
const DoubleDay = '222.herokuapp.com'
// 一切給CF代理,true/false
const CFproxy = true
// 由於heroku不綁卡不能自定義域名,就算綁卡後https也不方便
// 另外免費套餐每月550小時,有些人不夠用
// 於是在CF Workers使用此代碼,分單雙日拉取不同heroku帳號下的相同網頁
// 隻改上麵,下麵不用動
addEventListener('fetch', event => {
let nd = new Date();
if (nd.getDate()%2) {
host = SingleDay
} else {
host = DoubleDay
}
if (!CFproxy) {
let url=new URL(event.request.url);
if (url.protocol == 'http:') {
url.protocol = 'https:'
response = Response.redirect(url.href);
event.respondWith( response );
} else {
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);
if (url.protocol == 'http:') {
url.protocol = 'https:'
response = Response.redirect(url.href);
return response;
}
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;
}
單雙日分別填入不同的heroku帳號下的網站(當然2個網站要設置得一模一樣),這樣每個heroku帳號每個月都隻訪問15或16天,就算24小時有人訪問也才360或384小時。
最後,給workers加上自定義域名的路由!
從頭到尾都可以是Free的,不看網站頁麵,光從下載過程來看,可以完全假裝CF套在了大盤雞上,誰也看不出我沒服務器。