软件需求请点击此处留言菜鸟资源为你准备 立即查看

构建经济型页面反代系统:使用Cloudflare Workers替代收费腾讯云函数【免费技术分享】

构建经济型页面反代系统:使用Cloudflare Workers替代收费腾讯云函数【免费技术分享】

使用Cloudflare Workers搭建的页面反代系统,现已更新代码以符合HTTP协议标准,并支持响应206状态码。您只需将代码放入Workers中即可使用,无需进行任何更改。但请注意,为了使用该系统,您需要绑定自己的自定义域名。与腾讯...

当前版本

软件大小

软件语言

是否破解

使用Cloudflare Workers搭建的页面反代系统,现已更新代码以符合HTTP协议标准,并支持响应206状态码。您只需将代码放入Workers中即可使用,无需进行任何更改。但请注意,为了使用该系统,您需要绑定自己的自定义域名。与腾讯云函数相比,这是一个完全免费的解决方案,即使不符合所有HTTP标准,但仍能满足基本需求。

放入workers即可使用,无需更改。注意绑定自己的自定义域名。

Cloudflare cf使用workers搭建一个简单的免费页面反代系统,不符合HTTP协议标准规范但是能凑合用,腾讯云函数已经收费

下方代码,符合HTTP协议标准,已经支持响应206状态码放入workers即可使用,无需更改。注意绑定自己的自定义域名。

  1. addEventListener('fetch', event => {
  2. event.passThroughOnException()
  3. event.respondWith(handleRequest(event))
  4. })
  5. /**
  6. * Respond to the request
  7. * @param {Request} request
  8. */
  9. async function handleRequest(event) {
  10. const { request } = event;
  11. //请求头部、返回对象
  12. let reqHeaders = new Headers(request.headers),
  13. outBody, outStatus = 200, outStatusText = 'OK', outCt = null, outHeaders = new Headers({
  14. "Access-Control-Allow-Origin": reqHeaders.get('Origin'),
  15. "Access-Control-Allow-Methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS",
  16. "Access-Control-Allow-Headers": reqHeaders.get('Access-Control-Allow-Headers') || "Accept, Authorization, Cache-Control, Content-Type, DNT, If-Modified-Since, Keep-Alive, Origin, User-Agent, X-Requested-With, Token, x-access-token, Notion-Version"
  17. });
  18. try {
  19. //取域名第一个斜杠后的所有信息为代理链接
  20. let url = request.url.substr(8);
  21. url = decodeURIComponent(url.substr(url.indexOf('/') + 1));
  22. //需要忽略的代理
  23. if (request.method == "OPTIONS" && reqHeaders.has('access-control-request-headers')) {
  24. //输出提示
  25. return new Response(null, PREFLIGHT_INIT)
  26. }
  27. else if(url.length < 3 || url.indexOf('.') == -1 || url == "favicon.ico" || url == "robots.txt") {
  28. return Response.redirect('https://baidu.com', 301)
  29. }
  30. //阻断
  31. else if (blocker.check(url)) {
  32. return Response.redirect('https://baidu.com', 301)
  33. }
  34. else {
  35. //补上前缀 http://
  36. url = url.replace(/https:(\/)*/,'https://').replace(/http:(\/)*/, 'http://')
  37. if (url.indexOf("://") == -1) {
  38. url = "http://" + url;
  39. }
  40. //构建 fetch 参数
  41. let fp = {
  42. method: request.method,
  43. headers: {}
  44. }
  45. //保留头部其它信息
  46. let he = reqHeaders.entries();
  47. for (let h of he) {
  48. if (!['content-length'].includes(h[0])) {
  49. fp.headers[h[0]] = h[1];
  50. }
  51. }
  52. // 是否带 body
  53. if (["POST", "PUT", "PATCH", "DELETE"].indexOf(request.method) >= 0) {
  54. const ct = (reqHeaders.get('content-type') || "").toLowerCase();
  55. if (ct.includes('application/json')) {
  56. let requestJSON = await request.json()
  57. console.log(typeof requestJSON)
  58. fp.body = JSON.stringify(requestJSON);
  59. } else if (ct.includes('application/text') || ct.includes('text/html')) {
  60. fp.body = await request.text();
  61. } else if (ct.includes('form')) {
  62. fp.body = await request.formData();
  63. } else {
  64. fp.body = await request.blob();
  65. }
  66. }
  67. // 发起 fetch
  68. let fr = (await fetch(url, fp));
  69. outCt = fr.headers.get('content-type');
  70. if(outCt && (outCt.includes('application/text') || outCt.includes('text/html'))) {
  71. try {
  72. // 添加base
  73. let newFr = new HTMLRewriter()
  74. .on("head", {
  75. element(element) {
  76. element.prepend(`<base href="${url}" />`, {
  77. html: true
  78. })
  79. },
  80. })
  81. .transform(fr)
  82. fr = newFr
  83. } catch(e) {
  84. }
  85. }
  86. for (const [key, value] of fr.headers.entries()) {
  87. outHeaders.set(key, value);
  88. }
  89. outStatus = fr.status;
  90. outStatusText = fr.statusText;
  91. outBody = fr.body;
  92. }
  93. } catch (err) {
  94. outCt = "application/json";
  95. outBody = JSON.stringify({
  96. code: -1,
  97. msg: JSON.stringify(err.stack) || err
  98. });
  99. }
  100. //设置类型
  101. if (outCt && outCt != "") {
  102. outHeaders.set("content-type", outCt);
  103. }
  104. let response = new Response(outBody, {
  105. status: outStatus,
  106. statusText: outStatusText,
  107. headers: outHeaders
  108. })
  109. return response;
  110. // return new Response('OK', { status: 200 })
  111. }
  112. /**
  113. * 阻断器
  114. */
  115. const blocker = {
  116. keys: [".m3u8", ".ts", ".acc", ".m4s", "photocall.tv", "googlevideo.com"],
  117. check: function (url) {
  118. url = url.toLowerCase();
  119. let len = blocker.keys.filter(x => url.includes(x)).length;
  120. return len != 0;
  121. }
  122. }

workers反代使用方式

  1. https://workers绑定的自定义域名/https://www.xiciw.com/images/logo_an.svg

反代支持301跳转跟随来始终以https发起,目标域名不带http和带http均为http发起(如果301则为https发起),目标带https时候则强制以https发起(会校验TLS证书有效性,不允许反代目标域名为自签名)
cf反代回源站所传递的ip地址:2a06:98c0:3600::103
Cloudflare customer zone, the CF-Connecting-IP value will be set to the Worker client IP address ‘2a06:98c0:3600::103’ for security reasons.
数据来自官方文档:https://developers.cloudflare.com/workers/runtime-apis/headers/

提醒,请勿滥用,cf反代服务器每天限量10W次下载,每日早晨8点刷新配额。
CF反代代码没做ip地址支持,仅支持域名,反代能访问 1.1.1.1 1.1.1.2 1.1.1.3 1.0.0.1 1.0.0.2 1.0.0.3 这几个ip,其它ip都不允许直接访问
https://反代地址/https://1.1.1.1/cdn-cgi/trace 可以改成这样用来检测cf反代在线状态,非200状态码代表无法使用。反代超10W每日配额时是输出429状态码。

腾讯云函数也可以实现相同的效果:https://curl.qcloud.com/W4ANcAUL
但是收费了就不介绍了。

既然有反代那就要有屏蔽的方法
网站屏蔽Cloudflare cf使用workers搭建的反代爬虫bot,REMOTE_ADDR header头部禁止 2a06:98c0:3600::103 ipv6地址,非真实浏览器禁止访问

构建经济型页面反代系统:使用Cloudflare Workers替代收费腾讯云函数【免费技术分享】
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

常见问题

  • 如何安装和激活?

    每款软件会附带有安装教程,您打开安装包一目了然

  • 程序是否已损坏?文件损坏?还是其他错误?

    有错误问题,请您参考:https://www.xxx.com/error

  • 如何更新?正式激活后会发生什么情况?

    除非安装说明中另有说明,否则官方更新可能会导致无法激活。 要从本网站更新软件,您需要在此处下载此软件的新版本(如果可用),并将其安装在计算机上安装的版本之上(替换)。在这种情况下,您将保存此软件的激活和设置。

  • 如何下载?链接不起作用?

    我们使用百度网盘,132云盘和微软网盘,除了百度网盘,其他两款不限速,如果链接失效,请您联系客服处理

  • 已发布更新。我什么时候升级我的版本?

    所有软件如有更新,我们第一时间推送,视自己情况更新使用

  • 如何更改语言?

    打开“系统偏好设置”->“通用>语言和地区”->应用程序-“+”。 选择应用和语言。此方法适用于大多数应用程序。 Adobe 产品中的语言通常是在产品本身的安装阶段选择的。 游戏中的语言通常会在游戏本身的设置中发生变化。

  • 如何删除软件?

    有很多选择。最简单的方法是使用特殊的实用程序来卸载应用程序,例如App Cleaner Uninstaller 要删除 Adobe 产品,请使用 Creative Cloud Cleaner Tool

  • 需要远程帮助吗?

    网站已开通永久会员的可享受免费远程,如果非永久会员,远程安装另外收费

Linux教程技术教程菜鸟资源

30KB/s?不要命了!pikpak移动宽带下载限速破解大揭秘

2024-2-28 21:00:16

Linux教程技术教程

网站屏蔽Cloudflare cf使用workers搭建的反代爬虫bot,免费技术分享

2024-2-28 21:37:05

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
后退
榜单