在遇到API请求时抛出302状态代码如何解决此问题

时间:2019-08-30 06:28:11

标签: http flutter dart

与此同时,我正在使用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');
    }
  }

2 个答案:

答案 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 配置没有响应类型,因此您必须在标题中提及它。