Dituon 发布的帖子
-
[教程] 使用 cloud flare worker 实现免费接口代理
背景
看到了 @xiatianYa 的求助帖与一些回复 https://mirai.mamoe.net/topic/2575/ 发现很多人不知道 cloud flare worker 免费服务,作为
资深白嫖怪教大家如何白嫖接口代理。要求
- 您冰雪聪明的大脑 (必须)
- 一点js基础 (可选)
- 心仪的域名 (可选)
- 赞美的心 (可选)
介绍
cloud flare worker 是 cloud flare (知名免费CDN厂商) 一段时间之前推出的一项免费服务, 允许在CDN服务器上运行js脚本或wasm
截止到这篇文章写完的时候,这仍是一项长期免费服务,免费套餐为每天
100000
个请求, 大概是100个人 每人请求100次, 或0.01个人 每人请求10000000次步骤
如果您在下方任何步骤中出现了问题,请移步下方的
常见问题
小结-
创建Worker
-
设置一个便于记忆的 Name (可选)
-
创建成功,点击修改代码
-
写代码
以背景里的求助帖为例,需要代理的接口为
https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=A96B85AE8E6A3E52C726563D902C2B77&filter=addr\180.102.24.61:16261
则可以用以下代码代理
export default { async fetch(request, env, ctx) { // 指定要代理的目标地址 const targetURL = 'https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=A96B85AE8E6A3E52C726563D902C2B77&filter=addr\\180.102.24.61:16261'; const modifiedRequest = new Request(targetURL, request); const response = await fetch(modifiedRequest); return new Response(response.body, { status: response.status, statusText: response.statusText, headers: response.headers, }); }, };
-
保存 (建议先进行请求测试(葱绿色框框))
-
大功告成,可以通过图上的链接访问
https://hello-world-autumn-fire-2598.d2n.workers.dev/
-
可选:域名太丑怎么办,使用自己的域名代理
于是就可以在 https://d2n.moe/helloworker 访问了
常见问题
Q: 访问不了 cloudflare 怎么办啊
A: 参考下一条问题Q: 保存不了代码怎么办啊
A: 参考下一条问题Q: 默认的
workers.dev
域名访问不了怎么办啊
A:workers.dev
的域名在中国某些地区惨遭DNS污染,可修改hosts访问,或使用梯子进行编辑,挂载到自己的域名下即可Q: 挂载时找不到域名怎么办啊
A: 先在cloudflare中添加您的域名Q: 怎么添加域名啊
A: https://www.bing.com/search?q=cloudflare+添加域名Q: 遇到的问题这里没有怎么办啊
A: 跟帖补充后话
因为便于演示的原因,只代理了某个特定的地址,通过修改代码实现代理任意地址或动态地址等,也可实现修改header实现cors转发等高级操作,本教程抛砖引玉,希望坛友发挥主观能动性
如果你来自遥远的未来,本文的大部分信息可能已经失效(例如示例数据,代码,域名等), 请开动脑筋找到适合当前时代的解决方案, 也可以回帖询问我, 如果不回复就是已经过世了,请用赞美之心为我默哀几秒
如果你不会写代码,可以用以下咒语询问GPT等有代码写作能力的聊天AI
帮我写一个 cloudflare worker,风格为ESM,样式为: export default { async fetch(request, env, ctx) { return new Response('Hello World!'); }, }; 如果你有访问网络的能力,文档地址为 https://developers.cloudflare.com/workers/ 代理xxx地址,提供xxx功能,oooxxx
如果你的AI太笨, 写的代码没法用, 欢迎回帖求助
如果有任何其它问题,欢迎回帖提问
本文随意转载 CC-BY-NC-SA,请先告知我
-
RE: java如何使用mockbot来做捕获事件测试?
@hisou 我实现过这种需求,是用
LinkedHashMap<Long, String>
建立了图片缓存,仅缓存用户发送的图片,并指定缓存容量。伪代码
private LinkedHashMap<Long, String> imageCachePool; // 插件初始化 if (service.respondReply) { imageCachePool = new LinkedHashMap<>(service.cachePoolSize, 0.75f, true) { @Override public boolean removeEldestEntry(Map.Entry eldest) { return size() > service.cachePoolSize; } }; GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class, this::cacheMessageImage); GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessagePostSendEvent.class, this::cacheMessageImage); } private void cacheMessageImage(MessageEvent e) { for (SingleMessage singleMessage : e.getMessage()) { if (singleMessage instanceof Image) { long id = e.getSubject().getId() + e.getMessage().get(MessageSource.Key).getIds()[0]; imageCachePool.put(id, Image.queryUrl((Image) singleMessage)); return; } } } // 主消息处理方法 for (SingleMessage singleMessage : e.getMessage()) { if (singleMessage instanceof QuoteReply && service.respondReply) { long id = e.getGroup().getId() + ((QuoteReply) singleMessage).getSource().getIds()[0]; if (imageCachePool.get(id) == null) continue; //使用缓存的图片链接 } }
-
RE: java如何使用mockbot来做捕获事件测试?
原消息内容有什么用途呢 ?
如果只需要获取文本的话,可以 监听消息并取出引用消息实例直接获取文本 (例如: 引用消息的图片或at会转换为
[图片]
和@xxx
的形式)如果需要获取完整的原消息的话,可以考虑 通过消息id进行缓存 ,回复时从缓存取出原消息。
希望能具体描述一下想要实现的功能,而不是直接放出一段用于测试的代码
补充: 因为Mirai对于引用消息的处理在这两个获取方式下是有区别的,所以要按情境选择适合的方法进行处理, 建议补充实际使用场景便于解决问题