You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET重定向外部MP3返回HTML,Android如何直接获取文件?

解决Android客户端获取MP3文件时收到重定向HTML的问题

嘿,这个问题我之前也碰到过!原因是服务器返回的是302临时重定向响应,而你的Android HTTP客户端没有自动跟随这个跳转,所以拿到的是跳转提示的HTML页面,而不是实际的MP3文件。下面给你几个可行的解决办法:

1. 让HTTP客户端自动跟随重定向

大部分主流的Android HTTP库都支持自动跟随重定向,只需要确保相关配置开启:

用OkHttp实现(推荐)

OkHttp默认就会自动跟随重定向,如果你之前手动禁用了,重新开启即可:

OkHttpClient client = new OkHttpClient.Builder()
    .followRedirects(true) // 开启自动跟随重定向(默认值就是true)
    .followSslRedirects(true) // 确保HTTPS的重定向也能被跟随
    .build();

Request request = new Request.Builder()
    .url("你的服务器接口URL")
    .build();

try (Response response = client.newCall(request).execute()) {
    if (response.isSuccessful()) {
        // 获取MP3文件的输入流,后续可以保存到本地或直接播放
        InputStream mp3Stream = response.body().byteStream();
        // 这里添加你的流处理逻辑,比如写入文件
    }
} catch (IOException e) {
    e.printStackTrace();
}

用HttpURLConnection实现

HttpURLConnection需要手动开启重定向跟随:

URL apiUrl = new URL("你的服务器接口URL");
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setInstanceFollowRedirects(true); // 开启自动跟随重定向
connection.setRequestMethod("GET");

if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
    InputStream mp3Stream = connection.getInputStream();
    // 处理MP3流的逻辑
}
connection.disconnect();

2. 手动处理重定向(如果不想依赖自动跟随)

如果需要更精细的控制,可以先请求服务器接口,判断重定向响应,再手动请求实际的MP3地址:

URL apiUrl = new URL("你的服务器接口URL");
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setInstanceFollowRedirects(false); // 禁止自动跟随
connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();
// 检查是否是临时重定向(302)或永久重定向(301)
if (responseCode == HttpURLConnection.HTTP_MOVED_TEMP || responseCode == HttpURLConnection.HTTP_MOVED_PERM) {
    String actualMp3Url = connection.getHeaderField("Location");
    // 直接请求实际的MP3地址
    HttpURLConnection mp3Connection = (HttpURLConnection) new URL(actualMp3Url).openConnection();
    if (mp3Connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        InputStream mp3Stream = mp3Connection.getInputStream();
        // 处理MP3文件
    }
    mp3Connection.disconnect();
}
connection.disconnect();

3. 服务器端调整(如果有权限修改服务器代码)

如果能修改服务器的代码,最好的方式是跳过重定向,直接返回MP3文件的字节流,这样客户端不需要处理跳转逻辑。比如在ASP.NET中可以这样写:

string mp3SourceUrl = "https://externalserver-100.mp3";
using (WebClient webClient = new WebClient()) {
    byte[] mp3Bytes = webClient.DownloadData(mp3SourceUrl);
    Response.ContentType = "audio/mpeg";
    Response.OutputStream.Write(mp3Bytes, 0, mp3Bytes.Length);
    Response.End();
}

这样客户端请求服务器接口时,会直接收到MP3的字节流,不会再拿到重定向的HTML页面。

内容的提问来源于stack exchange,提问作者JustMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:42:46