全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[已解决] cf worker 反代某某网页出现这个

[复制链接]
发表于 2024-3-18 14:53:47 | 显示全部楼层 |阅读模式
本帖最后由 任播 于 2024-3-18 17:03 编辑

cf worker 反代某某网页出现这个

Error 1101
Worker threw exception

差不多一次正常,一次出现这个。错误率大约50%。有没有大神知道的。
事先说明,访问量很低,远远小于cf的额度。


已解决,换个代码就好了。供大家参考

  1. addEventListener(
  2.   "fetch",event => {
  3.      let url=new URL(event.request.url);
  4.      url.hostname="abc.def.xyz"; // 修改成自己的节点IP/域名
  5.      url.protocol='https'; // 如为http协议请修改为http
  6.      let request=new Request(url,event.request);
  7.      event. respondWith(
  8.        fetch(request)
  9.      )
  10.   }
  11. )
复制代码
发表于 2024-3-18 14:57:47 | 显示全部楼层
代码问题啊,讲道理“论坛永久贵宾”是什么啊
 楼主| 发表于 2024-3-18 15:01:39 | 显示全部楼层
jarmoku 发表于 2024-3-18 14:57
代码问题啊,讲道理“论坛永久贵宾”是什么啊

论坛永久贵宾  :  我付了钱买vip,你信不信。

代码类似于这种

  1. // 替换成你想镜像的站点
  2. const upstream = 'example.com'

  3. // 如果那个站点有专门的移动适配站点,否则保持和上面一致
  4. const upstream_mobile = 'example.com'

  5. // 你希望禁止哪些国家访问
  6. const blocked_region = ['KP']

  7. // 禁止自访问
  8. const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

  9. // 替换成你想镜像的站点
  10. const replace_dict = {
  11.     '$upstream': '$custom_domain',
  12.     '//google.com': ''
  13. }

  14. //以下内容都不用动
  15. addEventListener('fetch', event => {
  16.     event.respondWith(fetchAndApply(event.request));
  17. })

  18. async function fetchAndApply(request) {

  19.     const region = request.headers.get('cf-ipcountry').toUpperCase();
  20.     const ip_address = request.headers.get('cf-connecting-ip');
  21.     const user_agent = request.headers.get('user-agent');

  22.     let response = null;
  23.     let url = new URL(request.url);
  24.     let url_host = url.host;

  25.     if (url.protocol == 'http:') {
  26.         url.protocol = 'https:'
  27.         response = Response.redirect(url.href);
  28.         return response;
  29.     }

  30.     if (await device_status(user_agent)) {
  31.         upstream_domain = upstream
  32.     } else {
  33.         upstream_domain = upstream_mobile
  34.     }

  35.     url.host = upstream_domain;

  36.     if (blocked_region.includes(region)) {
  37.         response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
  38.             status: 403
  39.         });
  40.     } else if(blocked_ip_address.includes(ip_address)){
  41.         response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
  42.             status: 403
  43.         });
  44.     } else{
  45.         let method = request.method;
  46.         let request_headers = request.headers;
  47.         let new_request_headers = new Headers(request_headers);

  48.         new_request_headers.set('Host', upstream_domain);
  49.         new_request_headers.set('Referer', url.href);

  50.         let original_response = await fetch(url.href, {
  51.             method: method,
  52.             headers: new_request_headers
  53.         })

  54.         let original_response_clone = original_response.clone();
  55.         let original_text = null;
  56.         let response_headers = original_response.headers;
  57.         let new_response_headers = new Headers(response_headers);
  58.         let status = original_response.status;

  59.         new_response_headers.set('access-control-allow-origin', '*');
  60.         new_response_headers.set('access-control-allow-credentials', true);
  61.         new_response_headers.delete('content-security-policy');
  62.         new_response_headers.delete('content-security-policy-report-only');
  63.         new_response_headers.delete('clear-site-data');

  64.         const content_type = new_response_headers.get('content-type');
  65.         if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
  66.             original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
  67.         } else {
  68.             original_text = original_response_clone.body
  69.         }

  70.         response = new Response(original_text, {
  71.             status,
  72.             headers: new_response_headers
  73.         })
  74.     }
  75.     return response;
  76. }

  77. async function replace_response_text(response, upstream_domain, host_name) {
  78.     let text = await response.text()

  79.     var i, j;
  80.     for (i in replace_dict) {
  81.         j = replace_dict[i]
  82.         if (i == '$upstream') {
  83.             i = upstream_domain
  84.         } else if (i == '$custom_domain') {
  85.             i = host_name
  86.         }

  87.         if (j == '$upstream') {
  88.             j = upstream_domain
  89.         } else if (j == '$custom_domain') {
  90.             j = host_name
  91.         }

  92.         let re = new RegExp(i, 'g')
  93.         text = text.replace(re, j);
  94.     }
  95.     return text;
  96. }

  97. async function device_status (user_agent_info) {
  98.     var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
  99.     var flag = true;
  100.     for (var v = 0; v < agents.length; v++) {
  101.         if (user_agent_info.indexOf(agents[v]) > 0) {
  102.             flag = false;
  103.             break;
  104.         }
  105.     }
  106.     return flag;
  107. }


复制代码
发表于 2024-3-18 15:47:54 | 显示全部楼层
任播 发表于 2024-3-18 15:01
论坛永久贵宾  :  我付了钱买vip,你信不信。

代码类似于这种

我直接复制了你的代码,啥问题都没有
 楼主| 发表于 2024-3-18 15:53:46 | 显示全部楼层
那可能是我这里阻断了
 楼主| 发表于 2024-3-18 17:03:58 | 显示全部楼层
jarmoku 发表于 2024-3-18 15:47
我直接复制了你的代码,啥问题都没有

已解决,见一楼。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 15:06 , Processed in 0.059986 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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