axios重定向时更新cookie
一些对安全性较为严格的网站/接口会在收到请求时验证头文件中的cookie的合法性(格式、时效,等)。在cookie不合法时,会使用重定向的方式通知调用方更新cookie后重试。
因此前端/nodejs在使用axios请求对应接口或页面时就需要接收重定向返回的头文件信息以及生成最新的请求。
解决方案
解决思路:
- 禁用axios默认的重定向
- 接收重定向响应中的头文件信息
- 重新封装请求头
- 重新发起请求
贴代码
const axios = require('axios');
// 以全局配置为例
axios.defaults.headers = {
cookie: `旧的cookie`
};
// 封装重定向处理
async function redirectRequest(url) {
try {
const {data} = await axios.get(url, {
maxRedirects: 0, // 禁用重定向
});
return data;
} catch (e) {
const {response: {status, headers}} = e;
if (status === 302) { // 处理重定向请求
axios.defaults.headers.cookie = headers['set-cookie']; // key要具体配置,一般是set-cookie
return await redirectRequest(url);
}
throw e;
}
}
技术交流
wx:
thesilencewalker