如何使用axios捕获302跳转

在使用axios发送请求时,有时候会遇到服务器返回302跳转的情况。302状态码表示请求的资源暂时移到了另一个URI,需要重新发送请求到新的URI。下面我们将介绍如何使用axios捕获302跳转,以及如何处理这种情况。

1. 捕获302跳转

当服务器返回302状态码时,axios会自动跳转到新的URI,并返回重定向后的响应。为了捕获这个过程,我们可以通过配置axios实例的maxRedirects参数来控制最大重定向次数。

const axios = require('axios');

const instance = axios.create({
  maxRedirects: 0, // 禁止axios自动重定向
});

instance.get('
  .then(response => {
    console.log(response.status); // 输出302
    console.log(response.headers.location); // 输出重定向的URI
  })
  .catch(error => {
    console.log(error.response.status); // 输出302
    console.log(error.response.headers.location); // 输出重定向的URI
  });

在上面的代码中,我们创建了一个axios实例,并设置maxRedirects为0,这样axios就不会自动进行重定向。当接收到302状态码时,我们可以通过响应对象的headers.location属性获取重定向的URI。

2. 处理302跳转

如果我们想要手动处理302跳转,可以通过拦截器来实现。我们可以在请求拦截器中检查响应状态码,如果是302,则手动发送一次重定向请求。

const axios = require('axios');

const instance = axios.create();

instance.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response.status === 302) {
      const redirectUrl = error.response.headers.location;
      return axios.get(redirectUrl);
    }
    return Promise.reject(error);
  }
);

instance.get('
  .then(response => {
    console.log(response.data); // 输出重定向后的响应数据
  })
  .catch(error => {
    console.error(error);
  });

在上面的代码中,我们通过拦截器的方式处理302跳转。当接收到302状态码时,拦截器会获取重定向的URI,并发送一个新的GET请求到该URI。最终我们可以获取到重定向后的响应数据。

流程图

flowchart TD;
    A[发送请求] --> B{302跳转};
    B -->|是| C[捕获重定向URI];
    B -->|否| D[处理响应数据];

旅程图

journey
    title 使用axios捕获302跳转
    section 发送请求
        A[发送请求] 
    section 302跳转
        B{302跳转}
        B --> C[捕获重定向URI]
    section 处理数据
        D[处理响应数据]

通过以上的步骤,我们可以使用axios捕获和处理302跳转,实现更灵活的请求控制。希望以上内容对你有帮助!