Azure STT调用返回HTTP/1.1 400 Bad Request错误,求排查解决
Azure语音转文本400 Bad Request错误排查与解决
可能的原因及对应解决方法
1. 请求头Content-Type与实体类型不匹配
代码中设置了CONTENT_TYPE为AUDIO_WAV_TYPE,但请求实体使用的是ContentType.APPLICATION_OCTET_STREAM,这会导致Azure服务无法正确识别音频格式。
- 解决:将
FileEntity的ContentType改为与请求头一致的WAV类型,示例代码:request.setEntity(new FileEntity(convert(audio), ContentType.create(AUDIO_WAV_TYPE)));
2. API端点地址不正确
Azure语音转文本的REST API需要指定正确的区域和路径,标准格式应为https://<你的区域>.api.cognitive.microsoft.com/speech/recognition/conversation/cognitiveservices/v1。
- 解决:检查
env.getProperty("voice.text.api")返回的地址是否符合官方规范,确认区域(如eastus、southeastasia等)和路径是否完整正确。
3. 音频格式不符合要求
Azure STT要求WAV音频必须满足PCM编码、16kHz采样率、16位深度、单声道,若音频参数不匹配会触发400错误。
- 解决:
- 验证
audioReq解码后的原始音频是否为标准WAV格式; - 检查
convert(audio)方法是否完成了正确的格式转换,确保输出文件符合上述参数要求。
- 验证
4. 订阅密钥与区域不匹配
如果Voice.SubKey1对应的Azure语音资源区域,与API端点的区域不一致,服务会直接拒绝请求。
- 解决:确认订阅密钥所属资源的区域,与API端点区域保持一致,同时检查密钥是否有效(未过期、未被删除)。
5. 缺少必要的请求参数或头信息
- 解决:取消注释
Accept头设置,确保服务返回格式可被正确处理:
同时确认request.setHeader("Accept","application/json");sourceLang参数为BCP-47标准语言代码(如zh-CN、en-US)。
额外排查步骤
当前代码未读取响应体内容,Azure通常会在400错误的响应体中给出具体错误提示,添加以下代码获取详情:
String responseBody = EntityUtils.toString(response.getEntity()); System.out.println("错误详情:" + responseBody);
根据具体提示进一步定位问题。
内容的提问来源于stack exchange,提问作者Vijay Marappan
相关产品推荐
相关产品推荐

