全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 1740|回复: 17
打印 上一主题 下一主题

【已解决】如何使用 cloudflare worker 反代 FB 且可以登录

[复制链接]
跳转到指定楼层
1#
发表于 2020-10-1 07:50:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 史上第一 于 2020-10-4 02:34 编辑

RT,付费 2000 求教,有会的 PM 我

要求能实现登陆,并且不同的员工可以登陆自己的账号。

机场之类的不稳哈,还会影响电脑的网络,哪怕设置了规则也很烦。

付费求教实现方法,2000跟大佬交个朋友。
2#
发表于 2020-10-1 08:05:14 | 只看该作者
1000可以买火箭了
3#
发表于 2020-10-1 08:07:48 来自手机 | 只看该作者
1000买机场不香吗?
5#
发表于 2020-10-1 08:32:10 来自手机 | 只看该作者
// 替换成你想镜像的站点 const upstream = 'google.com'   // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = 'm.google.com'   // 密码访问   const openAuth = false const username = 'username' const password = 'password'   // 你希望禁止哪些国家访问 const blocked_region = ['RU']   // 禁止自访问 const blocked_ip_address = ['0.0.0.0', '127.0.0.1']   // 替换成你想镜像的站点 const replace_dict = {     '$upstream': '$custom_domain',     '//google.com': '' }   function unauthorized() {   return new Response('Unauthorized', {     headers: {       'WWW-Authenticate': 'Basic realm="goindex"',       'Access-Control-Allow-Origin': '*'     },     status: 401   }); }   function parseBasicAuth(auth) {     try {       return atob(auth.split(' ').pop()).split(':');     } catch (e) {       return [];     } }   function doBasicAuth(request) {   const auth = request.headers.get('Authorization');     if (!auth || !/^Basic [A-Za-z0-9._~+/-]+=*$/i.test(auth)) {     return false;   }     const [user, pass] = parseBasicAuth(auth);   return user === username && pass === password; }     async function fetchAndApply(request) {   if (request.method === 'OPTIONS') // allow preflight request     return new Response('', {       status: 200,       headers: {         'Access-Control-Allow-Origin': '*',         'Access-Control-Allow-Headers': '*',         'Access-Control-Allow-Methods': 'GET, POST, PUT, HEAD, OPTIONS'       }     });     if (openAuth && !doBasicAuth(request)) {     return unauthorized();   }     const region = request.headers.get('cf-ipcountry').toUpperCase();     const ip_address = request.headers.get('cf-connecting-ip');     const user_agent = request.headers.get('user-agent');       let response = null;     let url = new URL(request.url);     let url_host = url.host;       if (url.protocol == 'http:') {         url.protocol = 'https:'         response = Response.redirect(url.href);         return response;     }       if (await device_status(user_agent)) {         upstream_domain = upstream     } else {         upstream_domain = upstream_mobile     }       url.host = upstream_domain;       if (blocked_region.includes(region)) {         response = new Response('Access denied: WorkersProxy is not available in your region yet.', {             status: 403         });     } else if(blocked_ip_address.includes(ip_address)){         response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {             status: 403         });     } else{         let method = request.method;         let request_headers = request.headers;         let new_request_headers = new Headers(request_headers);           new_request_headers.set('Host', upstream_domain);         new_request_headers.set('Referer', url.href);           let original_response = await fetch(url.href, {             method: method,             headers: new_request_headers         })           let original_response_clone = original_response.clone();         let original_text = null;         let response_headers = original_response.headers;         let new_response_headers = new Headers(response_headers);         let status = original_response.status;           new_response_headers.set('access-control-allow-origin', '*');         new_response_headers.set('access-control-allow-credentials', true);         new_response_headers.delete('content-security-policy');         new_response_headers.delete('content-security-policy-report-only');         new_response_headers.delete('clear-site-data');           const content_type = new_response_headers.get('content-type');         if (content_type.includes('text/html') && content_type.includes('UTF-8')) {             original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);         } else {             original_text = original_response_clone.body         }           response = new Response(original_text, {             status,             headers: new_response_headers         })     }     return response; }   addEventListener('fetch', event => {     event.respondWith(fetchAndApply(event.request).catch(err => {       console.error(err);       new Response(JSON.stringify(err.stack), {         status: 500,         headers: {           'Content-Type': 'application/json'         }       });     })); })     async function replace_response_text(response, upstream_domain, host_name) {     let text = await response.text()       var i, j;     for (i in replace_dict) {         j = replace_dict[i]         if (i == '$upstream') {             i = upstream_domain         } else if (i == '$custom_domain') {             i = host_name         }           if (j == '$upstream') {             j = upstream_domain         } else if (j == '$custom_domain') {             j = host_name         }           let re = new RegExp(i, 'g')         text = text.replace(re, j);     }     return text; }   async function device_status (user_agent_info) {     var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];     var flag = true;     for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) {             flag = false;             break;         }     }     return flag; }  
6#
 楼主| 发表于 2020-10-1 08:37:43 | 只看该作者
回忆 发表于 2020-10-1 08:32
// 替换成你想镜像的站点 const upstream = 'google.com'   // 如果那个站点有专门的移动适配站点,否则保 ...

没用,但是感谢~
7#
发表于 2020-10-1 10:07:11 | 只看该作者
我寻思不如小鸡+cdn来的实在靠谱
9#
发表于 2020-10-1 10:08:56 | 只看该作者
2000买个机场隧道专线不香吗?
10#
发表于 2020-10-1 10:30:12 来自手机 | 只看该作者
这是为了cf的IP地址吧,理论上是可行的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-10-29 00:11 , Processed in 0.062425 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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