如何在 3 分钟内修复 Edge-TTS 403 访问被拒错误
【免费下载链接】edge-ttsUse Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts
Edge-TTS 是一个用 Python 调用微软 Edge 在线文本转语音(TTS,把文字读成语音)服务的库。你在部分地区遇到 Edge-TTS 403 错误、或edge-tts --list-voices拿不到结果时,照下面三步排查即可。
📡 症状速判:30 秒确认是否中招
- 如果你看到
WSServerHandshakeError: 403,且 URL 里含speech.platform.bing.com,说明 WebSocket 握手(客户端与服务端建立连接前的第一次身份核验)被服务端拒了。 - 如果运行
edge-tts --list-voices报Expecting value这类 JSON 解码错误,说明语音列表接口和语音合成接口同被拦截,不是你代码写错。 - 如果只有个别语音报错、其余正常,多半不是本次的 Edge-TTS 403 问题,先核对
--voice参数拼写。
📦 修复动作按优先级排好:先升级,再查网络
① 升级到最新版(改动成本最低)
旧版本存在 User-Agent(客户端向服务端报"身份"的字符串)拼接错误,且内置的 Chromium(浏览器内核)主版本号过旧,服务端会直接拒绝。升级一条命令搞定:
pip install --upgrade edge-tts若 pip 提示已是最新,直接进第 ② 步。升级成功后用这条命令验证:
edge-tts --list-voices | head -n 3能列出语音名,说明 Edge-TTS 403 错误已恢复,后面两步可跳过。
② 检查网络、代理、防火墙
403 不一定来自微软,代理层和防火墙也可能返回同样的状态码。先关代理跑一遍原命令,再开代理跑一遍:结果一致,问题在服务端校验一侧;结果不同,优先修网络,放行 443 端口出站即可。两条都失败时换手机热点再试,可排除本机 IP 被拦。
③ 手动补齐标准浏览器 User-Agent
若你用二次封装的库或自己拼 HTTP 请求,确认请求头带了完整 Edge 标识,可直接复制:
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"Edg/段缺失、或版本号与最新版 Edge 对不上,都会被拦。官方取值以 src/edge_tts/constants.py 为准。
🧐 为什么会被拦截:User-Agent 验证与 IP 段策略
- 服务端校验 User-Agent,只放行标准 Edge 浏览器格式的"自我介绍"。
- 部分 IP 段被加了额外安全策略,同一接口在部分地区请求会被直接拒绝。
- WebSocket 握手协议在持续更新,旧客户端的请求头满足不了新校验。
判断依据:换一张热点后症状消失,多半是 IP 段策略;不消失,就是 User-Agent 或协议校验的问题。
🔁 避免复发:3 个具体习惯
- 定期升级依赖:每周跑一次
pip install --upgrade edge-tts,或在 CI 里锁一个已验证可用的版本。 - 加超时和重试:调用代码里设置连接超时,遇到 403 或网络错误自动重试 2–3 次,别第一次失败就抛异常。
- 本地缓存语音列表:定期执行
--list-voices,把结果存成本地 JSON 文件,接口被拦时直接读缓存。
这一轮 Edge-TTS 403 错误多数在第 ① 步升级后就消失了。微软的校验策略还在调整,项目也会持续更新版本号,别长期停在旧版本。可照着 examples/ 的示例跑一遍验证。
【免费下载链接】edge-ttsUse Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考