与此同时,我正在使用http
飞镖库访问API,同时获取302状态代码。我知道302状态代码用于重定向,能否请您说如何在http post
方法中启用重定向。我使用了以下代码:
Future<LoginModel> login(String username, String password) async {
var client = new http.Client();
final response =
await client.post(LOGIN_URL +"username=Student&password=2018" ,
headers: {'Content-type': 'application/json',
'Accept': 'application/json'});
if (response.statusCode == 200) {
return LoginModel.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load post');
}
}
答案 0 :(得分:1)
302是服务器返回的状态代码,指示客户端应使用其他URL重试该请求。这是将客户端重定向到另一个端点的方法。
问题在于只能自动重试GET
(或HEAD
)个请求。您正在使用POST
。
如果响应其他请求而收到302状态代码 GET或HEAD,用户代理不得自动重定向 请求,除非可以被用户确认,因为这可能 更改发出请求的条件。
行为良好的API可能不会响应POST发出30X,但确实如此。解决此问题的方法是使用重定向的URL发出新的http请求。 (您可能希望将其放入while
循环中,以继续跟踪重定向,直到达到200,或出现一些错误,或达到超时/限制。)
答案 1 :(得分:0)
添加标题
"Accept":"application/json"
。此后它只会返回 json 数据,否则它会提示使用 html url 重定向,默认 dio 配置没有响应类型,因此您必须在标题中提及它。