Node.js Axios请求遇ERR_FR_TOO_MANY_REDIRECTS错误及解决方法
问题
尝试用Axios获取部分网站的最新Cookie时,遭遇ERR_FR_TOO_MANY_REDIRECTS错误,但Postman能正常请求返回结果,试了不少帖子里的方案都无效。
原代码如下:
const axios = require('axios'); const tough = require('tough-cookie'); const { AxiosCookieJarSupport } = require('axios-cookiejar-support'); async function getFreshCookies() { try { const cookieJar = new tough.CookieJar(); const config = { headers: {}, timeout: 30 * 1000, jar: cookieJar, }; AxiosCookieJarSupport(axios); axios.defaults.jar = cookieJar; let url = 'https://example.com/'; let response = await axios.get(url, config); let cookies = cookieJar.getCookiesSync(url); console.log('Successfully obtained fresh cookies.'); return cookies; } catch (error) { console.log(error); return false; } } getFreshCookies();
运行时的错误信息:
cause: Error [ERR_FR_TOO_MANY_REDIRECTS]: Maximum number of redirects exceeded at RedirectableRequest._processResponse (C:\Users\NewSystem\OneDrive\Desktop\node.js learning\test\node_modules\follow-redirects\index.js:371:24) at RedirectableRequest._onNativeResponse (C:\Users\NewSystem\OneDrive\Desktop\node.js learning\test\node_modules\follow-redirects\index.js:62:10) at Object.onceWrapper (node:events:628:26) at ClientRequest.emit (node:events:513:28) at HTTPParser.parserOnIncomingClient [as onIncoming] (node:_http_client:701:27) at HTTPParser.parserOnHeadersComplete (node:_http_common:119:17) at TLSSocket.socketOnData (node:_http_client:542:22) at TLSSocket.emit (node:events:513:28) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) { code: 'ERR_FR_TOO_MANY_REDIRECTS' }
解决方案
通过创建独立Axios实例并调整关键配置解决了问题,修改后的代码如下:
const axios = require('axios'); const http = require('http'); const https = require('https'); const tough = require('tough-cookie'); async function getFreshCookies() { try { const cookieJar = new tough.CookieJar(); const instance = axios.create({ httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), withCredentials: true, // 启用请求携带Cookie maxRedirects: 0, // 禁用自动重定向 jar: cookieJar, // 关联Cookie Jar }); const response = await instance.get('https://example.com', { maxRedirects: 0, validateStatus: null, // 禁用默认状态码校验 }); // 从响应头中获取Cookie const cookies = response.headers['set-cookie']; console.log('Cookies:', cookies); console.log('Response:', response.data); // 后续请求可使用获取到的Cookie return cookies; } catch (error) { console.log(error); return false; } }
核心调整点:
- 创建独立Axios实例,避免污染全局配置
- 开启
keepAlive保持连接复用 - 设置
maxRedirects: 0禁用自动重定向,规避循环重定向陷阱 - 启用
withCredentials确保Cookie正常传递 - 关闭默认状态码校验,允许处理3xx重定向类状态码
内容的提问来源于stack exchange,提问作者Bella X
相关产品推荐
相关产品推荐

