如何5分钟自托管一个免费付费墙突破服务:13ft Ladder 完整指南
【免费下载链接】13ftMy own custom 12ft.io replacement项目地址: https://gitcode.com/GitHub_Trending/13/13ft
13ft Ladder 是一款完全免费、可自托管的付费墙突破工具:它运行在你自己的机器上,让你不付费也能读到《纽约时报》、Medium 等站点付费文章的完整内容。它的思路其实并不神秘——很多网站为了被 Google 正确收录,会刻意给搜索引擎爬虫返回完整正文,只向普通访客显示"订阅解锁"的提示。13ft Ladder 做的事,就是让请求以 Google 爬虫的身份发出,取回那份"给爬虫看"的完整内容。
它是谁:一个跑在自己机器上的服务
一句话说清定位:13ft Ladder 是一个基于 Flask 的轻量 Web 服务,界面只有一个输入框和一个按钮,贴上链接就能拿到去掉付费墙和广告的全文页面。与同类在线服务 12ft.io 相比,它有两个明显区别——不需要注册排队,并且对部分 12ft.io 处理不了的站点有效。整个服务没有外部依赖,只有 Python 和几个 pip 包,所有请求都从你自己的实例发出。
它为什么能成:GoogleBot 伪装技术
核心机制写在 app/portable.py 里,关键就是几行请求头:
googlebot_headers = { "User-Agent": "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X ...) " "(compatible; Googlebot/2.1)" }很多出版方在服务器侧对搜索引擎爬虫放行完整 HTML。13ft Ladder 用这个 User-Agent 去请求目标页面,拿到的就是 Google 索引时看到的同一份页面。没有解密、没有账号、没有付费接口,技巧本身是"用上对方主动开放的东西"。
不过现实并不总是顺滑的:部分站点会识别出伪造的爬虫并抛出反爬质询(就是 Cloudflare 那句"Just a moment..."),Medium 还有自己的一套防护。所以 13ft Ladder 内置了多路回退——直连失败时依次尝试 Freedium(Medium 专用镜像)、archive.org 的 Wayback 快照、archive.ph 系列镜像,全部落空才报错。状态页会实时显示当前进行到哪一步,你能清楚看到它走的哪条路。
拿到页面后它还会做一层后处理:修正相对路径让图片和样式正常加载、剥离弹出付费墙和广告位注入的 JavaScript、替换站点 favicon。这也是为什么处理后的页面观感与原文差别不大。
如何部署 13ft Ladder:Docker 与 Python 两条路
Docker 一键启动
最省事的路线。仓库根目录的 docker-compose.yaml 只有几行,克隆后直接起:
git clone https://gitcode.com/GitHub_Trending/13/13ft cd 13ft docker compose up镜像拉取完成后,浏览器打开 http://127.0.0.1:5000 即可。端口映射写在 docker-compose.yaml 里,5000 被占用就改成任意空闲端口。
用 Python 直接运行
没有 Docker 环境也行,依赖只有 flask、requests、bs4、gunicorn 四个包:
cd app python -m pip install -r requirements.txt python portable.py多人共用或长期运行的场景,换成 Gunicorn 更稳:
python -m gunicorn 'portable:app' -b 0.0.0.0:5000真正用起来:从贴链接到看全文
界面被精简到极致:一个标题、一个输入框、一个 SUBMIT 按钮,右上角附赠一个暗色模式开关。点击输入框,边框以蓝色高亮提示可以输入。
粘贴目标文章的 URL,点 SUBMIT。页面随即切到抓取状态页:连接、下载、检测反爬、尝试快照回退、处理排版,每一步完成后打上勾,旁边还有耗时显示。
完成后自动跳转文章页,正文、图片、排版基本原样保留,付费墙和大部分广告消失。
还有一个免开界面的快捷方式:把目标链接直接拼在实例地址后面。例如服务跑在 http://127.0.0.1:5000 ,访问 http://127.0.0.1:5000/https://example.com/some-article 就会直接返回处理结果。
让 13ft Ladder 更合身:语言、书签与长期运行
切换界面语言。启动前设置 LOCALE 环境变量,服务会从 app/locales/ 加载对应翻译文件,内置德、法、韩,目录里还有中文、日语、西语、俄语等:
LOCALE=de python portable.py # 德语界面要加新语言,复制一份 en.json 翻译键值即可。
浏览器书签一键转换。创建一个书签,把地址换成你自己的实例:
javascript:(function(){window.location.href='http://127.0.0.1:5000/'+encodeURIComponent(window.location.href);})();之后在任何付费墙页面,点一下书签就把当前页送进 13ft Ladder。
服务器长期运行。README 里给了 systemd 服务示例:绑定 127.0.0.1、崩溃自动重启,再套一层反向代理对外提供 HTTPS(仓库里附了 Apache 配置参考)。多用户场景调一下 Gunicorn 的 worker 数即可,app/gunicorn.conf.py 已支持从 PORT 环境变量读端口。
它适合哪些场景
- 临时阅读:只想看一篇文章,不想为它订阅整个服务
- 研究学习:快速获取付费报告、长文的完整内容
- 广告清理:以无干扰的方式查看被付费墙拦住的页面
- 小团队共用:部署一份,内网共享使用
边界:它做不到什么,以及你该注意什么
先说技术边界:这套手法的前提是目标站点"愿意把全文给爬虫"。如果站点识别出伪造的 GoogleBot 并封锁,而 archive 快照里又没有记录,那就是真的无解——状态页会给出具体原因,而不是含糊地转圈。页面缓存只有 5 分钟,你看到的是抓取时刻的快照,动态更新的内容不保证实时。
再说责任边界:13ft Ladder 是透明的自托管服务,不记录你的请求,不收集任何数据,代码开源可审计。但绕过付费墙本质上是未付费阅读,个人偶尔用用与批量下载、二次传播是两回事,后者越过了尊重创作者的底线。如果你高频阅读某家媒体的内容,订阅是对作者最实在的支持,这个工具更适合"只是这一篇"的时刻。
小结
回顾一遍:13ft Ladder 靠"以爬虫身份请求"拿到全文,用快照与镜像做回退兜底;部署是一条docker compose up,使用是贴链接点一下。免费、自托管、数据不出自己的机器、代码量小到看得完。如果你的阅读习惯是"只看这一篇,然后翻篇",它可以把付费墙变成一段无感的历史。
【免费下载链接】13ftMy own custom 12ft.io replacement项目地址: https://gitcode.com/GitHub_Trending/13/13ft
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考