Flutter中使用Dio携带Bearer Token调用接口遇302错误,无法获取用户信息
解决Dio请求返回302错误的问题
可能的原因及解决方案
1. 检查请求方法是否匹配接口要求
获取用户列表这类查询接口通常使用GET方法而非POST,当前使用post请求可能触发服务器重定向。尝试修改请求方法:
Future fetchUsers() async { Dio dio = Dio(); dio.options.headers["Authorization"] = "Bearer 52|Umoe5JKgwYKoLacx8m2NtO3TJZa36iIqTh7KW3QR"; // 改用GET请求 Response response = await dio.get("http://52.90.175.175/api/user/get"); print(response); }
2. 开启自动跟随重定向
你设置了followRedirects = false,导致服务器返回302后不会自动跳转。若服务器的重定向合法(如HTTP转HTTPS),可开启自动跟随:
Future fetchUsers() async { Dio dio = Dio(); dio.options.headers["Authorization"] = "Bearer 52|Umoe5JKgwYKoLacx8m2NtO3TJZa36iIqTh7KW3QR"; // 允许自动跟随重定向 dio.options.followRedirects = true; // 放宽状态码校验,确保重定向请求能正常执行 dio.options.validateStatus = (status) => status! < 500; Response response = await dio.post("http://52.90.175.175/api/user/get"); print(response); }
3. 验证接口地址正确性
确认接口路径是否有误,比如是否应为复数形式/api/users/get,或者是否需要切换为HTTPS协议(将http改为https)。
4. 手动处理重定向
若需自定义重定向逻辑,可从响应头的location字段获取目标地址,携带原Token重新请求:
Future fetchUsers() async { Dio dio = Dio(); dio.options.headers["Authorization"] = "Bearer 52|Umoe5JKgwYKoLacx8m2NtO3TJZa36iIqTh7KW3QR"; dio.options.followRedirects = false; // 允许接收302状态码 dio.options.validateStatus = (status) => status! == 302 || status! < 500; Response response = await dio.post("http://52.90.175.175/api/user/get"); if (response.statusCode == 302) { String redirectUrl = response.headers["location"]!.first; // 携带原授权头部请求重定向地址 Response finalResponse = await dio.get(redirectUrl); print(finalResponse); } else { print(response); } }
内容的提问来源于stack exchange,提问作者Afthal Ad
相关产品推荐
相关产品推荐

