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
相关产品推荐
相关产品推荐

