跳至主要内容

博文

目前显示的是 十二月, 2023的博文

无服务器 自建短链服务 Url-Shorten-Worker 支持阅后即焚snapchat mode 配合二维码生成工具 制作一次性二维码

  需求 思路 二维码实际上就是以一种图片的方式写的一串字符. 这串字符可以是一个网址. 既然这个二维码图片已经发给别人了, 你不可以跑到别人的电脑或者手机里面去删掉图片, 那么"一次性二维码"是怎么实现的呢? 二维码图片不变, 那么二维码对应的网址A不变. 你访问网址A就是访问一个服务器. 这个服务器可以让来访问网址A的人都跳转到一个新的网址B. 我们定义网址B才是真正有实际意义的网址. 让服务器只允许第一次访问网址A的人跳转到网址B, 以后再来访问网址A, 跳转都失效. 这样就实现了 "一次性二维码". 举例,  实际有意义的网址, 是 https://google.com 我们搭建一个服务器, https://1way.eu.org 我们让  https://1way.eu.org/HcAx62 跳转到 https://google.com  而且只跳转一次. 我们以  https://1way.eu.org/HcAx62  生成一个二维码. 有人扫了这个二维码, 那么他会访问  https://1way.eu.org/HcAx62 , 系统让他跳转到 https://google.com , 然后系统记录这个  https://1way.eu.org/HcAx62  失效. 再有人扫了这个二维码, 那么他同样会访问  https://1way.eu.org/HcAx62 , 但是系统告诉他这个资源失效了. 实践 worker.js 增加一个配置项 snapchat_mode, 默认关闭. 在跳转原链之前, 将这条记录删除. 那么下次再来查, 就找不到记录了. 配合二维码编码解码工具, 转换一次性二维码的全流程 ======== Text. Text.

无服务器 自建短链服务 Url-Shorten-Worker 支持访问计数 visit count 支持查询短链 API接口增删查齐全 可以作为独立短链API服务

  感谢 https://github.com/EasyChris/Url-Shorten-Worker 实现基本的计数功能. 我在此基础上, 继续优化了操作页面, 可以在操作页面读出访问计数, 不需要到KV后台去看访问计数了. 效果 简述 @EasyChris 的方案 在KV里生成一个 短链-count 的记录, 里面写访问过的次数. 如: 短链是  NEhFs7 , 那么计数的记录就是  NEhFs7-count 这部分我不是作者, 我就不多讲了. 我继续优化的修改过程 index.js 优化代码, 把password的判断从每个命令的分支里面拿出来, 放到最外面. 增加 qry 命令, 可以查询 KV. 我这里用来查询计数值, 其实也是可以用来查询短链对应的长链的. 也就是说, 可以作为一个单独的短链API了, 增删查都有了.  main.js 查询次数按钮的实际动作 ======== 后记 打开计数功能的话, 写入KV的次数大大大增加, 创建短链时, 原本只写1次, 现在要写2次; 查询的时候, 原本只是读, 现在也要写1次. 这个 visit_count 配置项设置为 true 就是打开计数功能, Github 上面的配置文件默认是关闭的. Github:  https://github.com/crazypeace/Url-Shorten-Worker Text. Text.

无服务器 自建短链服务 Url-Shorten-Worker 增加删除某条短链的按钮

 源码GitHub:  https://github.com/Crap996/Url.CF-Web 搭建方法: https://blog.uncle.cloudns.org/2023/12/url-shorten-worker.html localStorage里只写短链的随机字符串 略 显示urlList的部分不用<ul>里面套<li>了。改为<div>里面套<div> 略 显示短链的时候,前面加个删除按钮 先把自动加载localStorage关了,然后在html里试着写一下,看看效果。 <div class="card-text">   <div classs="list-group" id="urlList">      <div class="list-group-item">       <button type="button" class="btn btn-danger">X</button>       <span>some text</span>     </div>     <div class="list-group-item">       <button type="button" class="btn btn-danger">X</button>       <span>some text some text some text some text some text some text some text some text some text some text some text </span>     </div>   </div> </div> API支持删除短链 POST增加字段 cmd: 取值add, del; keyPhrase: 在add时,是自定义短链;在del时,是指定删除的短链。 显示urlList

无服务器 自建短链服务 Url-Shorten-Worker 小改进 | Bootstrap List group | 长链接文本框预搜索localStorage | 代码优化

 源码GitHub:  https://github.com/Crap996/Url.CF-Web 搭建方法: https://blog.uncle.cloudns.org/2023/12/url-shorten-worker.html 效果: 应用 Bootstrap List group 美化 参考: Bootstrap List group https://getbootstrap.com/docs/4.0/components/list-group/ JS添加元素时添加class属性 https://developer.mozilla.org/en-US/docs/Web/API/Element/classList 实施: index.html 设置ul 的属性 class  list-group <ul classs="list-group" id="urlList">  main.js 设置li 的属性 class  list-group-item let urlList = document.querySelector("#urlList") let child = document.createElement('li') let text = document.createTextNode(shortUrl + " " + longUrl) child.appendChild(text) child. classList.add("list-group-item") urlList.append(child) -------- 代码优化 把load.js去掉了,代码并入main.js。向ul列表中添加li的代码提出为函数,在加载页面时和添加短链时调用。 function addUrlToList(shortUrl, longUrl) {   let urlList = document.querySelector("#urlList")   let child = document.createElement('li')   let text = document.createTextN

无服务器 自建短链服务 Url-Shorten-Worker 页面缓存曾经记录的短链接 localStorage

 源码GitHub:  https://github.com/Crap996/Url.CF-Web 搭建方法: https://blog.uncle.cloudns.org/2023/12/url-shorten-worker.html 效果: 不同的浏览器页面,缓存不互通。这样,不同的使用者互相之间不知道用本服务创建了什么短链。 方案: 当成功生成短链时,将短链与原链接保存到浏览器缓存 localStorage。 当打开此页面时,加载浏览器缓存 localStorage。 此 浏览器缓存 localStorage 为持久化保存的数据,关闭页面后还是保存在浏览器所在的机器上。 参考: JS增加页面元素 https://blog.csdn.net/weixin_39961943/article/details/110746052 JS删除页面元素 https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild 操作浏览器缓存localStorage http://caibaojian.com/localstorage-sessionstorage.html 具体实施: 在main.js中 // 成功生成短链 if (res.status == "200") {   let keyShortURL = window.location.host + res.key;   let valueLongURL = document.querySelector("#longURL").value;   // save to localStorage   localStorage.setItem(keyShortURL, valueLongURL);   // add to urlList on the page   let urlList = document.querySelector("#urlList")   let child = document.createElement('li')   let text = document.createTextNode(keyShortURL + " " + value

无服务器 自建短链服务 Url-Shorten-Worker API不公开服务

 源码GitHub:  https://github.com/Crap996/Url.CF-Web 搭建方法: https://blog.uncle.cloudns.org/2023/12/url-shorten-worker.html API不公开服务的修改思路: gh-pages分支下 index.html增加一个保存密钥的文本框, 在html文件中, 设置此文本框的值为__PASSWORD__ <input type="text" class="form-password" value="__PASSWORD__" readonly="true" id="passwordText"> main.js准备给POST的JSON里面添加这个文本框的值 body: JSON.stringify({ url: document.querySelector("#text").value, customShortURL: document.querySelector("#customShortURL").value, password: document.querySelector("#passwordText").value }) 准备放到worker的脚本 在返回index.html时,获取index.html后,替换__PASSWORD__为密钥 let index= await fetch("https://crazypeace.github.io/Url-Shorten-Worker/"+config.theme+"/index.html") index=await index.text() index=index.replace(/__PASSWORD__/gm, password_value) return new Response(index, {   headers: {     "content-type": "text/html;charset=UTF-8",   }, }) 获取POST过来的数据

无服务器 自建短链服务 Url-Shorten-Worker 支持自定义短链

源码GitHub:  https://github.com/Crap996/Url.CF-Web 搭建方法: https://blog.uncle.cloudns.org/2023/12/url-shorten-worker.html 支持自定义短链的修改思路: gh-pages分支下 index.html增加了一个可以输入自定义短链的文本框 <input type="text" class="form-customs-shorturl" placeholder="customs shorturl" id="customShortURL"> main.js准备给POST的JSON里面添加这个短链的文本 body: JSON.stringify({ url: document.querySelector("#text").value , customShortURL: document.querySelector("#customShortURL").value }) 准备放到worker的脚本 获取POST过来的数据 let req_customShortURL=req["customShortURL"] 增加自定义短链的处理   if (config.custom_link && (req_customShortURL != "")){     let is_exist=await LINKS.get(req_customShortURL)     if (is_exist != null) {       return new Response(`{"status":500,"key":": Error: Custom shortURL existed."}`, {         headers: response_header,       })     }else{       random_key = req_customShortURL       stat, await LINKS.put(req_cus

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程

  源码 GitHub: https://github.com/Crap996/Url.CF-Web 申请Cloudflare账号,略。 创建一个KV 记得这个KV的名字,以  urlsrv  为例 查看此KV 添加一个条目Entry 密钥key为 password ,值value为一个随机字符串. * password 这个key是在脚本中要引用的,所以要设置这个。 随机字符串可以使用http://git.io/xkcdpw生成 随机字符串以  yejiandianci  为例 创建Worker服务 设置绑定KV 变量名称必须设置为 LINKS , KV的名字选刚刚创建的 urlsrv * LINKS 是在脚本中要引用的,所以要设置这个。换句话说,如果你使用别的脚本,可能这个变量名称就不是LINKS了。 编辑Worker的脚本 把原有的内容全部删掉 换成: https://github.com/crazypeace/Url-Shorten-Worker/blob/main/worker.js 的内容 保存并部署 ====== 完 要访问 你的worker域名/ yejiandianci  来打开使用页面 域名添加就不再叙述了~   Text.

最最最好用的sing-box订阅转换工具,支持singbox1.8.0

简介 今天我来给大家分享一个singbox订阅转换工具,支持clash,v2ray,机场,自建转换,也支持sb最新的1.8.0版本,相当好用 singbox180正式版已经发布了,主要就是删除了肥硕无比的geosite和geoip,改用ruleset,将geodb切成碎片,做到即取即用。 例如(分流奈飞) 原先为: {geosite: netflix} 修改为: { rule_set: [       {         "tag": "netflix",         "type": "remote",         "format": "binary",         "url": "https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo/geosite/netflix.srs",         "download_detour": "direct"       } ] } 有的人可能会觉得这种方式会影响体验,不适合小白使用。 但是我觉得还是仁者见仁,智者见智。 geodb这个东西聚合了太多大家用不到的域名和ip集合,包括很多乱七八糟的网站,导致如果你要分流你就必须去拉取一个肥硕的文件,而你可能只用到这个文件的万分之一的内容。 在使用ruleset之后,我们就可以直接即取即用了,再也不用下载肥硕的geodb了,用什么下什么即可。 说了很多废话阿,不要见怪,下面直接进入主题。 项目地址 项目地址 该项目支持clash和v2ray订阅链接转singbox,相当的方便,当然singbox官方也有一个订阅转换的服务,大家有兴趣可以去研究研究。 方式一:直接转换(推荐) 此方式调用上述工具开放的api,每次访问下方链接时,都会执行一次订阅转换,相当地方便。 使用默认配置文件(1.8.0以上的ruleset) https://sing-box-subscribe.vercel.app/config/https://xxxxxxxxxxx 可自定义修改配置文件模板,修改file后面的链接为对应

给在 CF DNS 解析的 ClouDNS 域名启用 CloudFlare CDN

Text.  在上篇文章中,我讲解了如何解决 ClouDNS 域名无法在 CloudFlare DNS 解析的问题。但是如果想使用 CloudFlare CDN 呢,我们应该怎么办?在这篇教程中,我们来讲解给在 CF DNS 解析的 ClouDNS 域名启用 CloudFlare CDN。这篇教程就以官方的 ip 段为例,如果大家有条件的话,可以试着给自己的域名优选一个 IP 来使用。 准备材料 ClouDNS 域名及账号 CloudFlare 账号 解决步骤 打开 CF 的 DNS 控制面板,解析自己的域名,并打开小云朵 可以到 https://www.cloudflare.com/zh-cn/ips/ ,查看 CloudFlare 的官方 IP 段。这里我就取 104.16.0.0 和 2606:4700:: 来为例 打开 ClouDNS 的域名解析页面,添加一条 A 记录。名称和 CF DNS 解析的名称一样,但是解析的 IP 为刚刚记录的 CF CDN IP 添加一条 AAAA 记录。名称和 CF DNS 解析的名称一样,但是解析的 IP 为刚刚记录的 CF CDN IPv6 IP   5.等待 ClouDNS 解析好之后,尝试 ping,如果 ping 出来的 IP 是解析好的 CF CDN IP,即可代表成功。

解决 ClouDNS 域名无法在 CloudFlare DNS 解析的问题

Text. 在我们将 ClouDNS 域名 CloudFlare 之后,估计大家可能发现了一个问题:如果在 CloudFlare 的 DNS 解析这个域名,那这个域名有可能无法使用。这是因为不知道啥的原因,ClouDNS 的域名 DNS 还未完全转接给 CloudFlare 进行托管。这篇教程中,我就来和大家一起来解决 ClouDNS 域名无法在 CloudFlare DNS 解析的问题。 准备材料 ClouDNS 域名及账号 CloudFlare 账号 解决步骤 打开 CF 的 DNS 控制面板,解析自己的域名,并关闭小云朵 我们这时可以尝试 ping,可以发现是很大概率是 ping 不出来的 这时,我们回到 ClouDNS 的域名解析页面,添加一条和 CF DNS 相同样的记录 等待 ClouDNS 解析好之后,再次尝试 ping,如果 ping 出来的 ip 是解析好的 ip,即可代表成功。

解决 ClouDNS 域名申请 CloudFlare SSL 证书问题

Text.  在上篇文章,我讲解过了如何在 ClouDNS 上申请自己的免费二级域名。但是如果使用这个域名并配合 CloudFlare 的 SSL 证书的话,可能会出现这个问题。在这篇文章中,我们就着手来解决这个问题 准备材料 ClouDNS 域名 CloudFlare 账号 部署步骤 打开 CF 的控制面板,然后进入到自己的域名。转到 SSL 中的 Edge Certificates 页面,找到类似 *.xx.cloudns.biz, xx.cloudns.biz 的选项,点击展开,然后复制里面的 TXT 记录和值备用 打开 ClouDNS 的域名 DNS 的 TXT 解析页面,然后点击 “Add new record” 按钮,创建 TXT 记录 将 CF 的解析值填写进来 等待大概 15-30 分钟,然后 Status 出现 “Active” 即可

申请 ClouDNS 的免费域名

在之前的教程中,我曾经介绍了 eu.org 这个二级域名,但是由于其人工审核的时间过长,从而需要耐心等域名审批下来。在等待的时候,还有什么域名可以使用的呢?这篇文章中,我们就来申请 ClouDNS 的免费域名,作为一段时间的备选。 准备材料 邮箱(最好是大厂邮箱) 申请步骤 打开 ClouDNS 的官网: https://www.cloudns.net/ ,点击“Sign in”进行登录 如有账号可以直接登录即可,没有账号点击 “Sign up new account” 进行注册 点击 Zones 右边的 “create zone” 按钮,然后点击 “Free zone”选项 输入域名,然后点击 “Create” 按钮 这时就可以看到域名已经创建成功了 文章作者: MisakaNo Text.   eu.org 这个二级域名,但是由于其人工审核的时间过长,从而需要耐心等域名审批下来。在等待的时候,还有什么域名可以使用的呢?这篇文章中,我们就来申请 ClouDNS 的免费域名,作为一段时间的备选。 准备材料 邮箱(最好是大厂邮箱) 申请步骤 打开 ClouDNS 的官网: https://www.cloudns.net/ ,点击“Sign in”进行登录 如有账号可以直接登录即可,没有账号点击 “Sign up new account” 进行注册 点击 Zones 右边的 “create zone” 按钮,然后点击 “Free zone”选项 输入域名,然后点击 “Create” 按钮 这时就可以看到域名已经创建成功了

百度网盘不限速全平台方案-Kubedown原理解析

Text.   KubeDown已经G了,大家可以找其他替代服务,原理大致一样,文件id的获取方式可能有差异。 前言 在更换Macos之前,本人一直用的是 Idm+kubedown 进行下载,但是更换了macos之后,我发现mac平台并没有IDM,经过搜索引擎的功劳,我总结出两个平台的不限速下载方式 原理浅析 IDM/NDM IDM 采用名为 “Dynamic Segmentation” 的特殊下载算法,其原理:预先创建下载分块文件到临时目录,按一定算法写入数据到各个分块文件,下载完毕整合分块文件。该算法可有效可提升下载效率,并在可续传的情况下避免下载文件损坏 (IDM 每隔一分钟保存文件下载进度,断电或者异常下载中断后可恢复)。 大概就是:先将要下载的文件分成几小块,然后分别从每小块开始下载,多线程下载一个文件。 KubeDown 完整代码 // ==UserScript== // @name 百度网盘不限速下载-KubeDown // @description 百度网盘不限速下载-KubeDown-Script // @version 2.4 // @author KubeDown // @antifeature membership // @license AGPL-3.0 // @icon https://p1.meituan.net/csc/6a347940f064146525be36b80541490124528.png // @resource https://cdn.staticfile.org/limonte-sweetalert2/11.7.1/sweetalert2.min.css // @require https://cdn.staticfile.org/limonte-sweetalert2/11.7.1/sweetalert2.all.min.js // @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js // @grant GM_xmlhttpRequest // @match *://pan.baidu.com/* // @connect kubedown.com // @connect