反代网站
反代
网站代码(gpt的代码)
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
31export default {
async fetch(request) {
// 目标站点(在这里改成你想代理的地址)
const target = "https://example.com";
const url = new URL(request.url);
const proxyUrl = target + url.pathname + url.search;
// 构造新的请求头,避免部分头导致跨域或安全问题
const newHeaders = new Headers(request.headers);
newHeaders.set("Host", new URL(target).host);
const newRequest = new Request(proxyUrl, {
method: request.method,
headers: newHeaders,
body: request.method === "GET" || request.method === "HEAD" ? null : request.body,
redirect: "follow"
});
const response = await fetch(newRequest);
// 你也可以在这里对返回头进行处理
const resHeaders = new Headers(response.headers);
resHeaders.set("Access-Control-Allow-Origin", "*");
return new Response(response.body, {
status: response.status,
headers: resHeaders
});
}
};同上谷歌代码
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
54export default {
async fetch(request) {
// 目标站点(在这里改成你想代理的地址)
const target = "https://feichang99.github.io/";
const targetUrl = new URL(target);
// 1. 构造代理 URL
const url = new URL(request.url);
const proxyUrl = targetUrl.origin + url.pathname + url.search;
// 2. 构造新的请求头,只复制不需要过滤的头,并设置 Host
const newHeaders = new Headers();
newHeaders.set("Host", targetUrl.host);
// 复制原始请求头,排除敏感或可能导致问题的头
for (const [key, value] of request.headers.entries()) {
const lowerKey = key.toLowerCase();
// 排除与 CF/IP/连接相关的头,以及 Cookie 等
if (!lowerKey.startsWith('cf-') && !['host', 'cookie', 'connection', 'x-forwarded-for', 'x-real-ip'].includes(lowerKey)) {
newHeaders.set(key, value);
}
}
// 3. 处理请求 Body
const hasBody = !['GET', 'HEAD'].includes(request.method.toUpperCase());
const newRequest = new Request(proxyUrl, {
method: request.method,
headers: newHeaders,
body: hasBody ? request.body : null,
redirect: "follow"
});
const response = await fetch(newRequest);
// 4. 处理响应头
const resHeaders = new Headers(response.headers);
// 移除 X-Frame-Options, Content-Security-Policy 等可能阻碍代理嵌入的头 (按需)
resHeaders.delete("x-frame-options");
resHeaders.delete("content-security-policy");
// 强制添加 CORS 头
resHeaders.set("Access-Control-Allow-Origin", "*");
resHeaders.set("Access-Control-Allow-Methods", "*");
resHeaders.set("Access-Control-Allow-Headers", "*");
return new Response(response.body, {
status: response.status,
headers: resHeaders
});
}
};网页代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
// HTML代码
let html = `
<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body><div>Hello world!</div></body>
</html>
`;
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
return new Response(html, {
headers: {
'Content-Type': 'text/html; charset=UTF-8'
},
status: 200
})
}
代理 Google 站点
1 | // 反代目标网站 |
原文作者: J时游
原文链接: https://feichang99.github.io/or/4863cb23.html
版权声明: 转载请注明出处(必须保留作者署名及链接)