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

Flutter使用Dio请求登录API出现Http status error [301]问题排查

301错误排查方案
  • 检查协议是否应为HTTPS:很多服务会强制将HTTP请求重定向到HTTPS,Thunder Client可能自动跟随了重定向并完成请求,但你的Dio代码用的是http://开头的地址。尝试把地址改成https://someaddress.com/api/auth/login再测试。

  • 验证Dio的重定向配置:Dio默认开启followRedirects: true,但POST请求遇到301重定向时,部分服务器会将请求方法转为GET,导致请求参数丢失而失败。可以手动配置Dio的重定向行为,或者捕获重定向后重新发送POST请求:

    final dio = Dio(BaseOptions(
      followRedirects: false,
      validateStatus: (status) => status! < 400, // 允许3xx状态码通过
    ));
    final response = await dio.post(...);
    if (response.statusCode == 301) {
      final redirectUrl = response.headers.value('location');
      if (redirectUrl != null) {
        final finalResponse = await dio.post(redirectUrl, data: {"login": phone, "password": event.password});
        // 处理最终响应
      }
    }
    
  • 检查地址末尾的斜杠:部分服务器会对不带末尾斜杠的地址返回301重定向到带斜杠的地址。比如你的请求地址是/api/auth/login,尝试改为/api/auth/login/再测试。

  • 核对域名是否一致:确认服务器是否存在域名跳转规则(比如someaddress.com重定向到www.someaddress.com),Thunder Client可能自动使用了正确的域名,而你的Dio代码里的地址未更新。可以对比Thunder Client的请求地址和Dio的地址是否完全一致。

  • 匹配请求头信息:Thunder Client会自带一些默认请求头(比如特定的User-Agent),而Dio的默认请求头可能不同,导致服务器触发重定向。可以在Dio中添加与Thunder Client相同的请求头,比如:

    _dio.options.headers['User-Agent'] = 'Thunder Client (https://www.thunderclient.com)';
    

    再测试是否能正常请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:55:19