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

Flutter中如何解决Dio请求返回302状态码问题

处理Flutter Dio请求返回302状态码的方案

你已经通过followRedirects: false关闭了Dio的自动重定向,同时validateStatus: (status) => status! < 500让302不会被判定为请求错误,接下来可以按以下步骤手动处理302重定向:

1. 获取重定向目标地址

当请求返回302时,重定向的目标地址会放在响应头的location字段中,你可以直接从response.headers提取:

Response response = await dio.get(targetUrl, options: yourOptions);
if (response.statusCode == 302) {
  String? redirectUrl = response.headers.value('location');
  if (redirectUrl != null) {
    // 执行后续重定向逻辑
  }
}

2. 处理相对路径的重定向地址

如果location返回的是相对路径(比如/api/new-endpoint),需要拼接原请求的域名和协议,转换为绝对地址:

Uri originalUri = Uri.parse(targetUrl);
Uri redirectUri = originalUri.resolve(redirectUrl!);
String absoluteRedirectUrl = redirectUri.toString();

3. 携带Cookie维持会话

302响应通常会附带Set-Cookie头,需要将这些Cookie传递给后续的重定向请求,保证会话状态一致:

// 提取302响应中的Cookie
List<String>? cookies = response.headers['set-cookie'];
Options redirectOptions = Options(
  headers: {
    if (cookies != null) 'Cookie': cookies.join('; '),
    // 保留原请求的其他请求头
    ...yourOptions.headers ?? {},
  },
  followRedirects: false,
  validateStatus: (status) => status! < 500,
);

// 发起重定向请求
Response redirectResponse = await dio.get(absoluteRedirectUrl, options: redirectOptions);

4. 封装自动重定向逻辑(可选)

如果需要多次处理302,可以封装工具函数,限制最大重定向次数避免无限循环:

Future<Response> requestWithRedirect(Dio dio, String url, Options options, {int maxRedirects = 3}) async {
  Response response = await dio.get(url, options: options);
  int redirectCount = 0;
  
  while (response.statusCode == 302 && redirectCount < maxRedirects) {
    String? redirectUrl = response.headers.value('location');
    if (redirectUrl == null) break;
    
    Uri originalUri = Uri.parse(url);
    Uri redirectUri = originalUri.resolve(redirectUrl);
    url = redirectUri.toString();
    
    // 携带Cookie
    List<String>? cookies = response.headers['set-cookie'];
    options.headers?.addAll({
      if (cookies != null) 'Cookie': cookies.join('; '),
    });
    
    response = await dio.get(url, options: options);
    redirectCount++;
  }
  return response;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:52:06