惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
分享一下防止国内 oss 防止被白嫖,从而白嫖 cloudflare 的思路
jeesk · 2026-01-11 · via V2EX
  1. 使用 r2 自己做一个 dl 资源分发下载站,worker 一个 js 文件即可处理. 简单高效
// src/templates/populated-worker/src/index.js

var src_default = {
  async fetch(request, env) {
    const { DATABASE, r2_dl} = env;
    const url = new URL(request.url);

    switch (url.pathname) {
      case "/ping": 
        return new Response('pong', { status: 200 });

      case "/upload": {
        // --- 新增 Basic Auth 校验 ---
        const auth = request.headers.get("Authorization");
        if (!auth) {
          return new Response("Unauthorized", {
            status: 401,
            headers: { "WWW-Authenticate": 'Basic realm="Upload Access"' }
          });
        }

        // 解析 Basic Auth 字符串 (Base64 解码)
        const base64 = auth.split(' ')[1];
        const decoded = atob(base64);
        const [user, pass] = decoded.split(':');

        // 验证用户名和密码 (对应后台设置的环境变量)
        if (user !== "v2ex" || pass !== "xe2v") {
          return new Response("Forbidden", { status: 403 });
        }
        // --- 校验结束 ---

        if (request.method !== "PUT") {
          return new Response("Method Not Allowed", { status: 405 });
        }

        const fileName = url.searchParams.get("filename");
        if (!fileName) {
          return new Response("Missing 'filename' parameter", { status: 400 });
        }

        try {
          await r2_dl.put(fileName, request.body, {
            httpMetadata: {
              contentType: fileName.endsWith(".apk") 
                ? "application/vnd.android.package-archive" 
                : "application/octet-stream",
            }
          });
          return new Response(`Successfully uploaded: ${fileName}`, { status: 200 });
        } catch (e) {
          return new Response(`Upload failed: ${e.message}`, { status: 500 });
        }
      }

      case "/download": {
        const fileName = url.searchParams.get("file");
        if (!fileName) return new Response("Missing 'file'", { status: 400 });

        const object = await r2_dl.get(fileName);
        if (object === null) return new Response("Not Found", { status: 404 });

        const headers = new Headers();
        object.writeHttpMetadata(headers);
        headers.set("etag", object.httpEtag);
        headers.set("Content-Disposition", `attachment; filename="${encodeURIComponent(fileName.split('/').pop())}"`);

        return new Response(object.body, { headers });
      }

      default:
        return new Response('Not Found', { status: 404 });
    }
  }
};

export { src_default as default };

  1. 比如 dl.xx.com/1.apk 使用 doh 查询这个 dns. 然后再请求
  2. 如果上面的 ip 很有可能 sockstimeout, 说明这个 ip 已经被封。 目前看有国内 5%的请求失败。
  3. anycast 的 ip 被封是有可能的, 目前从我获取到的数据大约是 5%的请求会被 ban. 这个时候建议使用大站 ip 。
      "www.visa.cn", // Visa 中国官网(带 www ) - CloudFlare CDN
         "www.visa.com", // Visa 国际官网
         "visa.com", // Visa 国际
         "www.shopify.com", // Shopify 官方
         "store.ubi.com", // Ubisoft 商店
         "mfa.gov.ua", // 乌克兰外交部

使用上面的 ip 随机来请求,上面的 ip 比较稳定.

  1. 如上面的 ip 都不行,那么就需要针对网络运营商优选 ip. 两种情况, 伪代码如下
val 运营商  = if(手机是 wifi 或者 vpn) {
  //那么直接使用 ipinfo 之类来获取运营商
}else{
  // 安卓直接 simOperator 来获取运营商信息
}

// 使用

   val ipStr =  if(result == "中国联通"){
      httpRequest("https://cf.090227.xyz/cu")
    }else if(result == "中国移动"){
      httpRequest("https://cf.090227.xyz/cmccd")
    }else if(result == "中国电信"){
      httpRequest("https://cf.090227.xyz/ct")
    }else{
      // 不知道是杀,听天由命了。 选择最快的的 ip
      httpRequest("https://cf.090227.xyz/ip.164746.xyz")
      }
    
拿到 ip 后再访问下载站。 


当然你也可以使用 github release 的方式找几个 proxy 来下载请求,

我推荐的是最开始优选 github 代理加速, 代理炸了,再使用 cf 优选 ip.

然后上面的一些地址最好使用 dns txt 保持动态更新。 美滋滋。 上面优选 ip 最好先并发请求一下,能够 ping 测速一下在做真实请求。 这样一来每个月 50g 的流量,一年能省不少的钱。谁叫国内没法上架呢。