【问题标题】:while hitting an API Request throws 302 status code how to solve this在点击 API 请求时抛出 302 状态代码如何解决这个问题
【发布时间】:2019-08-30 06:28:11
【问题描述】:

我正在使用http dart 库访问 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');
    }
  }

【问题讨论】:

    标签: http flutter dart


    【解决方案1】:

    302 是服务器返回的状态码,表示客户端应该使用不同的 URL 重试请求。这是一种将客户端重定向到不同端点的方法。

    问题是只有GET(或HEAD)请求可以自动重试。您正在使用POST

    如果收到 302 状态代码以响应请求,而不是 GET 或 HEAD,用户代理不能自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。

    行为良好的 API 可能不应该发出 30X 来响应 POST,但它确实如此。解决这个问题的方法是使用重定向的 URL 发出一个新的 http 请求。 (您可能希望将其放入 while 循环中以继续跟踪重定向,直到达到 200、出现错误或达到超时/限制。)

    【讨论】:

      【解决方案2】:

      添加标题 "Accept":"application/json" 。以后它只会返回 json 数据,否则会提示使用 html url 重定向,默认 dio 配置没有响应类型,所以你必须在 header 中提及它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-06-12
        • 1970-01-01
        • 2019-01-20
        • 2011-08-16
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 2017-10-03
        相关资源
        最近更新 更多