收藏夹里那篇《HTTP下载龙卷风系列Office/Photoshop/金山词霸快译/》还能打开,但里面三个下载地址已经集体叛变:Microsoft Office 2003 with SP2 龙卷风大企业版、Adobe Photoshop CS2 龙卷风大企业版、金山词霸2006/金山快译2006 龙卷风2合1免激活版,当年清一色是ftp://soft999_ftp:1234567890@www...这种带账号密码的链接,如今要么连接超时,要么干脆报 550。这次我让 Codex 走 TaoToken 的统一 API 通道来批量排查:先到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 拿 Key,再把 Base URL 填成https://taotoken.net/api,剩下的探测脚本由 Codex 生成、我在本地执行,输出再贴回对话。TaoToken 在这里只负责给 Codex 提供稳定可用的模型接入,不替代 curl、wget 这些下载工具本身。
1. 三个老链接为什么集体失效:先给资源做个体检
1.1 原文里的下载地址是什么形式
当年的论坛资源帖很少写「点击下载」,而是直接贴一串带账号密码的 FTP 完整 URL。soft999_ftp是机房开给发布者的上传账号,1234567890是配套密码,普通访客拿着这串地址走匿名 FTP 也能进入指定目录。这种方式的优点是下载速度稳定、断点续传方便;缺点是账号密码一旦泄露或到期,整批链接瞬间作废。原文里的三个资源都依赖同一个 FTP 账号,所以现在要么一起超时,要么一起 530,极少出现「Office 能下、Photoshop 打不开」的中间状态。
除了账号过期,老链接还有一层常见损坏:帖子被转载时,后台编辑器会自动截断超长 URL,把中间一段换成省略号。原文里ftp://soft999_ftp:1234567890@www ... SP2_CHS_V2.2.rar就是典型的半截地址,手动补全时只要漏掉一个字符,curl 就会去请求一个不存在的路径,返回 550 或 404。因此排查的第一步,是先明确手上的地址到底缺了哪一段,而不是反复刷新重试。
1.2 失效的三种典型表现
这类老链接打不开,通常可以归成三类。第一类是 DNS 失败,域名早已不再解析,curl 直接报Could not resolve host,这种情况基本可以放弃原地址,直接去找镜像。第二类是连接超时,服务器还在,但 FTP 服务被关或防火墙屏蔽了外网访问,卡在Connected to之后没有任何后续响应。第三类是登录被拒,FTP 账号被停用,服务端返回 530 或 550,这是最常见的结局。
比较隐蔽的是第四种:链接能连上、账号也能登录,但文件下载到一半断开,rar 解压时报「CRC 校验失败」。这种问题无法通过状态码发现,只能靠下载后的体积核对和压缩包完整性判断。所以我建议把排查分成两层:先用 curl 探测链接是否有效,再把能下载的文件用rar t或sha256sum做一次校验,两层都过才算真正可用。
1.3 排查工具怎么选
逐个打开浏览器点一遍当然可以,但三个地址还算少,如果以后整理整个收藏夹,还是命令行更高效。curl 加-I可以看 HTTP 头,加-v可以看 FTP 登录过程,加-o /dev/null可以丢掉正文只留状态。把这些命令组合成一个脚本,就能批量检查一批 URL。Codex 在这里扮演的是「排障助手」:我告诉它三个资源的背景,它负责生成脚本、解释状态码、对比不同状态码的处理建议。脚本本身在本地终端运行,Codex 不会替你连接那台可能有 IP 白名单的老 FTP 服务器。
2. 准备材料:TaoToken 拿 Key,Codex 备好通道
2.1 Codex 需要什么才能跑
Codex 本身是命令行工具,但每次生成脚本和解释结果都要调用模型 API。如果你已经有可用的 OpenAI 兼容 API,可以直接配置;如果嫌 Key 管理麻烦,或者要在多个模型之间换来换去,统一 API 兼容通道会更省事。TaoToken 提供的就是这样一个统一的 Base URL,把模型路由、Key 校验、用量统计收口到同一个入口,Codex 只需要指向一个地址就能换用不同的模型 ID。
2.2 打开落地页创建 Key
准备材料只有两步:打开 TaoToken 注册并进入控制台,创建一把 API Key;然后到模型广场看看当前提供哪些模型 ID。Key 的复制要完整,前后不要留空格,更不要顺手粘到笔记软件里多出换行符。模型 ID 以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 页面上当时列表为准,不要凭记忆输入某个版本号,社区的模型列表更新速度往往跟不上实际变化。
2.3 官网落地页和 Base URL 别搞混
这里要分清两个网址。https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content= 是给人点的落地页,注册、建 Key、看模型广场、查用量都在这里;https://taotoken.net/api是写给 Codex 填的 Base URL,末尾不要加/v1,也不要加 UTM 参数。两者就像超市入口和员工通道,入口随时可以闲逛,但配送司机只会去找发货区。第一次配置的人最容易在这里翻车:把 Base URL 填成落地页地址,Codex 会把请求发到网页服务器,自然拿不到模型响应。
3. 在 ~/.codex/config.toml 里把 Codex 指到 TaoToken
3.1 配置 model_provider
Codex 的配置文件是~/.codex/config.toml,TOML 格式,不是 JSON。在文件里追加下面这段,然后把MODEL_ID替换成模型广场上实际存在的模型 ID:
# ~/.codex/config.toml model = "MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"env_key指定的是环境变量名,Codex 会从这个变量里读取 API Key。这样 Key 不会写死在配置文件里,换 Key 时只在当前终端会话里重新 export 一次即可。注意不要在这里模仿 Claude Code 的ANTHROPIC_BASE_URL一套配置,Codex 走的是自己的 provider 机制,直接把ANTHROPIC_*变量搬过来不会被识别。
3.2 设置环境变量并验证连通
保存并重启 Codex 之前,在终端先做一步:
export TAOTOKEN_API_KEY=YOUR_API_KEY如果想让配置长期生效,可以把这行追加到~/.bashrc或~/.zshrc,但注意不要让包含真实 Key 的文件被同步工具传到云端。重启 Codex 后,输入一个最简单的对话:「请告诉我你当前的 Base URL 配置。」如果它回答https://taotoken.net/api,说明通道已经打通;如果它报错 model not found,就回到模型广场重新复制模型 ID。
3.3 常见的三个配置坑
第一个坑是 Base URL 末尾加/v1,Codex 会请求https://taotoken.net/api/v1/...得到一个不存在的路径,症状是 404。第二个坑是model填了官方文档里的历史模型名,而当前模型广场已经没有这个 ID,症状是模型不存在。第三个坑是环境变量没有 export,Codex 提示找不到 API Key,这时候检查TAOTOKEN_API_KEY的拼写和值是否完整,别急着怀疑通道地址。还有一个隐蔽问题:如果之前设置过OPENAI_API_KEY,某些 Codex 版本会优先读它,导致实际请求没用上 TaoToken 的 Key,排查时可以临时把OPENAI_API_KEY从环境里去掉。
4. 让 Codex 生成链接体检脚本,你在本地执行
4.1 给 Codex 的提示词
配置好之后,把三个资源的背景和你的目标告诉 Codex,让它生成一个 bash 脚本。
我在排查三个老软件下载链接是否还可用: - Office 2003 龙卷风大企业版:ftp://soft999_ftp:1234567890@www.example.com/Office_SP2_CHS_V2.2.rar - Photoshop CS2 龙卷风大企业版:ftp://soft999_ftp:1234567890@www.example.com/PhotoshopCS2_CHS.rar - 金山词霸2006/金山快译2006 二合一:ftp://soft999_ftp:1234567890@www.example.com/PowerWord2006.rar 请写一个 bash 脚本,逐个探测这些地址的状态:HTTPS 地址用 curl -I 或 -r 0-0 看状态码;FTP 地址用 curl -v 看连接和登录响应。脚本不要下载完整文件,每行输出一个结果;同时允许我在文件里额外加入待检查的镜像 URL。4.2 脚本示例:check_legacy_links.sh
Codex 给出的脚本可能长这样,保存为check_legacy_links.sh后先chmod +x再运行:
#!/usr/bin/env bash # check_legacy_links.sh # 用法: ./check_legacy_links.sh url_list.txt if [[ $# -lt 1 ]]; then echo "用法: $0 <url列表文件>" exit 1 fi while IFS= read -r url; do [[ -z "$url" || "$url" =~ ^# ]] && continue proto="${url%%://*}" echo "===== $url =====" case "$proto" in http|https) code=$(curl -L -s -o /dev/null --connect-timeout 15 --max-time 30 \ -w "%{http_code}" "$url") echo "HTTP 状态码: $code" ;; ftp) result=$(timeout 20 curl -v --max-filesize 1024 "$url" -o /dev/null 2>&1) if [[ -z "$result" ]]; then echo "FTP: 无响应(连接被切断或超时)" else echo "$result" | grep -E "Connected to|denied|550|530|timed out|Could not resolve" | head -5 fi ;; *) echo "不支持的协议: $proto" ;; esac done < "$1"这个脚本对 HTTP/S 地址使用curl -L跟随跳转,输出最终状态码;对 FTP 地址用-v抓取连接和登录阶段的服务端响应,--max-filesize 1024保证只拉取极小一段就停止,不会把几百 MB 的老压缩包真的拖到本地。在 Linux 或 WSL 上可以直接跑;macOS 没有默认的timeout命令,可以换成gtimeout,或者删掉timeout 20前缀手动控制。
4.3 把运行结果贴回对话
先准备一个url_list.txt,把三个原始 FTP 地址依次放进去,再顺手把猜测的 HTTP 镜像地址也加进去,比如某位网友在博客里补全过的https://legacy.example.com/Office_SP2_CHS_V2.2.rar。然后在本地终端执行:
./check_legacy_links.sh url_list.txt输出会是类似下面这样的形式,域名和状态码仅供参考:
===== ftp://soft999_ftp:1234567890@www.example.com/Office_SP2_CHS_V2.2.rar ===== FTP: * Connected to www.example.com (203.0.113.10) port 21 < 530 This account is not available. ===== https://legacy.example.com/Office_SP2_CHS_V2.2.rar ===== HTTP 状态码: 403把每一行输出完整贴回 Codex 的对话窗口,它会逐条判断:530 表示 FTP 账号被停,403 表示 HTTP 目录禁止访问,接下来该换什么镜像,或者哪些地址可以直接删掉。注意不要让 Codex 自己去重新执行这些命令,排查脚本必须在你自己的网络环境里跑,结果才接近真实下载条件。
5. 状态码解读:200 不一定能下,550 不一定无解
5.1 HTTP 状态码速查
拿到状态码之后,先别急着下结论。200 表示请求成功,但如果服务器不支持断点续传,实际下载中途断掉依然白干;301 和 302 是跳转,配合curl -L最终拿到 200 说明镜像有效;403 是服务器拒绝访问,可能是防盗链或目录禁止列表,加一个-e "https://example.com"Referer 头再试一次,不行就放弃;404 是文件已经被删除。老服务器里还有一种常见情况是 405,表示不支持 HEAD 请求,这时把curl -I换成curl -r 0-0 -s -o /dev/null -w "%{http_code}",只请求文件第一个字节,返回 200 或 206 都说明文件还能读。
5.2 FTP 状态码与老服务器特性
FTP 的响应码更有年代感。530 是登录失败,账号密码不再有效,基本可以宣布原地址死亡;550 是请求的文件不存在或没有权限,可能是路径拼错,也可能是文件被管理员挪走了;425 和 426 是数据连接异常,常见于服务器被动模式配置问题,有时换被动模式开关能解决。还有一个容易被忽略的情况:老 FTP 服务器对同一 IP 的连接数有限制,刚测完一个地址立刻测下一个,可能被临时踢出,返回 421。遇到这种状态码,等一两分钟再试即可。
5.3 压缩包校验不过怎么办
如果状态码全绿,但下载下来的压缩包只有几 KB,或者解压到一半报「CRC 校验失败」,问题通常出在文件传输被截断,或者原始文件本身已经损坏。此时单独测状态码已经没有意义,需要重新找镜像。老资源镜像首选方:高校 FTP、软件博物馆存档站、以及 archive.org 上由网友保留下来的原版打包;避开那些把「绿色版」「优化版」当噱头的下载站,这类重新打包版本最容易夹带脚本。Office 2003、Photoshop CS2 和金山词霸 2006 都早已停止安全更新,建议只在虚拟机里安装,不要作为主力生产软件长期使用。
6. 验证调用与收尾:把这次排查记到账上
6.1 回控制台核对调用记录
一轮排查下来,Codex 来回生成脚本、解释输出,每一轮对话都会在 TaoToken 侧产生调用记录。打开 TaoToken 控制台 的 API Keys 页面,确认这把 Key 的调用次数和 token 消耗是否符合预期,顺便检查有没有异常请求来自你没见过的机器。如果这次排查只是临时需求,跑完就可以把 Key 停掉或重换;如果后续还要长期帮朋友整理老资源,可以看看 Coding Plan 是否更划算,避免按次充值花冤枉钱。
6.2 用模型对话页做终检
在 TaoToken 模型对话 里用同一把 Key 发一条测试消息,是验证 Key 是否有效的快速方式。如果对话页正常但 Codex 报错,问题大概率出在 config.toml 或环境变量;如果两边都报错,再到控制台检查 Key 是否被停用或额度是否耗尽。这样就能把「Codex 配置问题」和「TaoToken 账号问题」区分开,不用反复猜。
6.3 老资源排查的取舍
整理旧链接这件事,最花时间的不是写脚本,而是接受有些地址真的已经消失了。原文里的三个 FTP 链接,大概率会在 530 和 550 之间徘徊,能救回来的是那些被好心人复制到新镜像站的文件。Codex 的价值在于把「探测—解释—换源」的过程压缩到十分钟内,至于最终要不要下载、要不要安装,判断权仍然在你自己手里。TaoToken 承担的角色始终只是模型接入这一环:拿 Key、填 Base URL、看调用记录,剩下的都是常规命令行操作。链接能下就下,下不了就换镜像,换不了就存档等将来有人重新上传,不必强求。