worker反代Loc完美版,实现免FQ使用,完善了手机版样式

addEventListener('fetch', event => {

event.respondWith(handleRequest(event.request));

});

const TARGET_URL = "https://hostloc.com";

const TARGET_URL_REGEXP = /hostloc\.com/g;

const TARGET_HOSTNAME = new URL(TARGET_URL).hostname;

const handleRequest = async request => {

const url = new URL(request.url);

url.hostname = TARGET_HOSTNAME;

let headers = new Headers(request.headers);

headers.set("Referer", TARGET_URL);

headers.set("User-Agent", request.headers.get("user-agent"));

const param = {

method: request.method,

headers: headers,

body: request.body,

redirect: "manual"

}

const response = await fetch(url, param);

return handleResponse(request, response);

}

const handleResponse = async (request, response) => {

const contentType = response.headers.get('content-type');

let headers = new Headers(response.headers);

headers.set('Access-Control-Allow-Origin', '*');

headers.set('Access-Control-Allow-Methods', 'GET');

headers.set('Access-Control-Allow-Headers', 'Content-Type');

let location = response.headers.get('location');

if (location) {

location = location.replace(TARGET_URL_REGEXP, new URL(request.url).hostname);

headers.set('location', location);

}

const data = (contentType && contentType.includes('text')) ? await response.text() : await response.blob();

const modifiedData = (typeof data === 'string') ? data.replace(TARGET_URL_REGEXP, new URL(request.url).hostname) : data;

return new Response(modifiedData, {

status: response.status,

statusText: response.statusText,

headers: headers

});

}