全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2809|回复: 17

worker反代Loc

[复制链接]
发表于 2023-5-22 10:04:13 | 显示全部楼层 |阅读模式
正常显示图片,登录,回复,查看

  1. addEventListener('fetch', event => {
  2.   event.respondWith(handleRequest(event.request));
  3. });

  4. async function handleRequest(request) {
  5.   let url = new URL(request.url);
  6.   url.hostname = 'hostloc.com';
  7.   let response = await fetch(url, request);

  8.   // 检查响应头中的内容类型
  9.   const contentType = response.headers.get('content-type');
  10.   if (contentType && contentType.includes('text')) {
  11.     // 如果是文本类型,替换响应主体中的URL
  12.     let responseBody = await response.text();
  13.     responseBody = responseBody.replace(/hostloc\.com/g, 'restless-shape-9e4f.你的.workers.dev');

  14.     // 复制响应对象并更新它的属性
  15.     let headers = new Headers(response.headers);
  16.     headers.set('Access-Control-Allow-Origin', '*');
  17.     headers.set('Access-Control-Allow-Methods', 'GET');
  18.     headers.set('Access-Control-Allow-Headers', 'Content-Type');

  19.     return new Response(responseBody, {
  20.       status: response.status,
  21.       statusText: response.statusText,
  22.       headers: headers
  23.     });
  24.   } else {
  25.     // 如果不是文本类型,直接返回响应对象
  26.     return response;
  27.   }
  28. }
复制代码

https://pastebin.ubuntu.com/p/R6xWqs6Zcs/
发表于 2023-5-22 14:40:33 | 显示全部楼层
本帖最后由 WwzwW 于 2023-5-24 12:20 编辑

15行那个可以不需要填写自己的反代地址,用这个就行
  1. new URL(request.url).hostname
复制代码


甚至可以更通用的反代,完整代码
  1. addEventListener('fetch', event => {
  2.   event.respondWith(handleRequest(event.request));
  3. });

  4. // 准备反代的目的域名
  5. let target_url = "hostloc.com";

  6. async function handleRequest(request) {
  7.   let url = new URL(request.url);
  8.   url.hostname = target_url;
  9.   let response = await fetch(url, {
  10.     method: request.method,
  11.     headers: request.headers,
  12.     body: request.body
  13.   });

  14.   // 检查响应头中的内容类型
  15.   const contentType = response.headers.get('content-type');
  16.   if (contentType && contentType.includes('text')) {
  17.     // 如果是文本类型,替换响应主体中的URL
  18.     let responseBody = await response.text();
  19.    
  20.     responseBody = responseBody.replace(/hostloc\.com/g, new URL(request.url).hostname);

  21.     // 复制响应对象并更新它的属性
  22.     let headers = new Headers(response.headers);
  23.     headers.set('Access-Control-Allow-Origin', '*');
  24.     headers.set('Access-Control-Allow-Methods', 'GET');
  25.     headers.set('Access-Control-Allow-Headers', 'Content-Type');

  26.     return new Response(responseBody, {
  27.       status: response.status,
  28.       statusText: response.statusText,
  29.       headers: headers
  30.     });
  31.   } else {
  32.     // 如果不是文本类型,直接返回响应对象
  33.     return response;
  34.   }
  35. }
复制代码

发表于 2023-5-22 13:42:13 | 显示全部楼层
我要像你这样懂那么多技术,就好了.
发表于 2023-5-22 13:50:36 | 显示全部楼层
自己nginx反代搞了一个带PWA的 把header标签替换加了几行关于menifest.json的直接手机“app”走起
发表于 2023-5-22 13:53:48 | 显示全部楼层
用的人多 cf的ip直接被论坛拉黑了 一样用不了
发表于 2023-5-22 14:48:34 来自手机 | 显示全部楼层
发帖和搜索正常吗
发表于 2023-5-22 14:57:32 | 显示全部楼层
本帖最后由 WwzwW 于 2023-5-22 14:59 编辑

而且,你的fetch连body都没传过去,怎么登录、发帖的?

  1. let response = await fetch(targetUrl, {
  2.     method: request.method,
  3.     headers: request.headers,
  4.     body: request.body
  5.   })
复制代码
发表于 2023-5-22 15:12:50 来自手机 | 显示全部楼层
WwzwW 发表于 2023-5-22 14:57
而且,你的fetch连body都没传过去,怎么登录、发帖的?

登录可以,发帖好像不行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-4 18:59 , Processed in 0.066220 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表