【已解决】有关OKHTTP与APIPost返回的字节流不同的问题
本帖最后由 未晴雾香 于 2024-10-12 19:18 编辑最近在使用Java的okhttp调用OpenAi的speech生成语音接口,生成的语音音频一直报错,经过反复调试代码,一直显示语音文件损坏等等错误。
而使用API Post进行调用接口,返回音频可以正常播放。
下面是一段curl:
```curl
curl --request POST \
--url https://api.openai.com/v1/audio/speech \
--header 'Accept: */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: Bearer ********************' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/json' \
--header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \
--data '{
"model": "tts-1",
"input": "你好,有什么可以帮助你的",
"voice": "alloy"
}'
```
下面是我的Java代码:
```java
// textToSpeech是上面datad的实体类
String requestString = JSON.toJSONString(textToSpeech);
Request request = new Request.Builder()
.header("Authorization", "Bearer " + apiKey)
.url(ValidateUtil.concatUrl(baseUrl, openAiConfig.getSpeechUrl()))
.post(RequestBody.create(MediaType.parse("application/json"), requestString))
.build();
// 发送请求并获取响应
try (Response response = okHttpClient.newCall(request).execute()) {
// 检查响应是否成功
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
// 获取响应体
ResponseBody responseBody = response.body();
if (responseBody != null) {
InputStream inputStream = responseBody.byteStream();
return inputStream;
}
} catch (IOException e) {
e.printStackTrace();
}
```
问题排查:
通过Java调用,返回的InputStream如下图:
而api post调用的结果如下:
因为mp3音频的前几个字节`FF F3 E4 C4`,所以可以知道okhttp这里获取的是错误的字节流。
经过多方面的查找和问AI,一直没有找到造成的原因和解决方案。因此求助站内各位大佬,请求各位大佬帮助 会不会返回的是压缩的字节流 本帖最后由 不知道改成啥 于 2024-10-12 09:07 编辑
java里面没启用这个吧--header 'Accept-Encoding: gzip, deflate, br' \
.header("Content-Encoding", "gzip")
.addInterceptor(new GzipRequestInterceptor())//开启Gzip压缩 不知道改成啥 发表于 2024-10-12 09:05
java里面没启用这个吧--header 'Accept-Encoding: gzip, deflate, br' \
.header("Content-Encoding", " ...
大佬,我试过了,这个方法也不行
页:
[1]