先看现象。在 Windows 上用 edge-tts 7.0 命令行合成中文语音,之前一直正常,某天开始每次都返回 403 且响应体为空,日志里只有 Invalid response status。换 voice 名、换文本长度、换成 python 调用都复现,代理开关关掉也一样。
排查方向其实有限,先把可能性排一排。客户端版本旧了,缺少服务端要求的 Sec-MS-GEC 签名头。还有一种是系统时间偏差超过几分钟,签名时间戳直接失效。
不容易想到的是,企业代理拦截了 wss 连接,返回自己的 403 页面。
还有一种情况,token 缓存文件损坏,一直复用过期凭据。
上来先确认本机时间与授时服务器偏差
w32tm /stripchart /computer:time.windows.com /samples:3 /dataonly
升级到最新版本后重试
pip install -U edge-tts
随后清掉本地凭据缓存再合成一次
python -c "import edge_tts;print(edge_tts.__version__)"
末了改用 python 接口打印完整响应
python -c "import asyncio,edge_tts;asyncio.run(edge_tts.Communicate('测试','zh-CN-XiaoxiaoNeural').save('t.mp3'))"
改完先别撤,确认这几项。合成返回 200 并生成可播放的 mp3,文件时长与文本长度匹配,连续 20 次调用不再出现 403。
这类 403 多是签名头或时间戳问题,不是 key 失效,先校时再升级客户端,比反复换 voice 有效。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
