使用HttpWebRequest调用Google TTS API遇401未授权错误排查
排查Google TTS音频合成接口401未授权问题
- API服务未启用:获取语音列表的接口仅需基础密钥权限,但音频合成接口依赖Text-to-Speech API服务本身。去Google Cloud控制台确认该服务是否已启用——哪怕密钥能正常调用语音列表,服务未开启的话合成请求必然返回401。
- 请求格式不规范:合成接口是POST请求,对
Content-Type(需设为application/json)和请求体格式要求严格。检查你的HttpWebRequest代码:是否正确设置了Content-Type?是否将符合要求的JSON请求体完整写入请求流?格式错误有时会被权限校验逻辑误判为未授权,而非返回400参数错误。 - 密钥传递方式错误:语音列表接口支持将密钥放在URL的
key参数中,但合成接口可能要求通过Authorization头传递(格式为Bearer {你的API密钥})。不要混用两种传递方式,严格对照官方文档的认证要求调整。 - 区域或配额冲突:确认请求URL的区域后缀是否与项目绑定的区域一致(比如
https://texttospeech.googleapis.com/v1/text:synthesize是全局端点,部分区域可能有特定子域名)。另外,即便密钥无限制,短时间内高频请求也可能触发临时配额限制,导致401错误。 - HttpWebRequest默认行为干扰:比如自动重定向过程中丢失密钥参数,或默认请求头存在冲突字段。尝试禁用自动重定向,手动显式设置所有必要请求头,示例代码:
var request = (HttpWebRequest)WebRequest.Create("https://texttospeech.googleapis.com/v1/text:synthesize?key=你的密钥"); request.Method = "POST"; request.ContentType = "application/json"; // 若用Authorization头则替换上方URL参数,添加以下行: // request.Headers.Add("Authorization", "Bearer 你的密钥"); // 写入JSON请求体逻辑
内容的提问来源于stack exchange,提问作者Wim ten Brink
相关产品推荐
相关产品推荐

