You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用axios抓取HTML页面返回301/302重定向错误如何解决

问题原因

这个重定向循环是站点反爬风控触发的,和maxRedirects参数配置、代理类型本身没有直接关系,Postman能正常请求是因为它默认的请求指纹、cookie处理逻辑和裸axios请求存在差异,没有触发风控规则。具体触发点包括:

  • 你当前使用的User-Agent是2016年发布的Firefox 47版本,版本过旧,和当前真实浏览器的特征完全不符,会被直接判定为爬虫请求,持续重定向到校验页面形成循环。
  • 请求头缺失关键特征字段:当前仅配置了3个基础头,真实浏览器请求会携带Accept-Language、Accept-Encoding、Sec-Fetch-*系列、Upgrade-Insecure-Requests等特征头,字段缺失会导致请求指纹和真实浏览器不匹配,触发风控。
  • 未做cookie持久化:首次访问站点时会下发风控校验类cookie,后续重定向请求必须携带该cookie才能通过校验,axios默认不会自动持久化、携带重定向过程中set-cookie的内容,会导致一直被打回重定向。
  • 代理节点质量不达标:Macys对非美国本土IP、机房IP、公开免费代理IP的校验非常严格,这类IP发起的请求会被持续重定向到地区选择页或人机验证页,Postman如果使用的是本地正常网络或干净的美国住宅IP节点,就不会触发这类拦截。
  • 你遇到的maxRedirects=0时的未处理Promise报错是基础写法问题,所有axios请求都需要通过try/catch或者.catch()捕获异常,和重定向逻辑本身无关。
解决方案
  1. 先安装cookie持久化依赖,解决重定向过程中cookie丢失的问题:
npm install axios tough-cookie axios-cookiejar-support
  1. 替换为最新的真实浏览器User-Agent,补全必要的请求头,将maxRedirects设置为合理值(5-10即可,正常合法请求最多3次跳转就能到达目标页,设1000无意义还会导致死循环),参考配置代码如下:
const axios = require('axios');
const { wrapper } = require('axios-cookiejar-support');
const { CookieJar } = require('tough-cookie');

// 初始化cookie持久化实例
const jar = new CookieJar();
const client = wrapper(axios.create({ jar }));

client("https://www.macys.com", {
  method: "GET",
  maxRedirects: 5,
  // 确认代理为美国本土干净住宅IP再开启下面的代理配置
  // proxy: {
  //   host: "你的代理地址",
  //   port: 代理端口,
  //   auth: {
  //     username: "代理认证用户名",
  //     password: "代理认证密码"
  //   }
  // },
  headers: {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Sec-Fetch-User": "?1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
  },
}).then(res => {
  console.log(res.data);
}).catch(err => {
  // 排查时可以临时打开下面的注释,打印3xx响应的跳转地址,判断跳转目标
  // if (err.response && err.response.status >=300 && err.response.status <400) {
  //   console.log("跳转目标地址:", err.response.headers.location);
  // }
  console.error(err);
})
  1. 排查代理节点质量:如果配置代理后依然出现循环重定向,先把上面代码里打印跳转地址的注释打开,若跳转到路径带/international的地址,说明代理IP非美国本土;若跳转到路径带validate、captcha的地址,说明代理IP是机房IP或已经被拉黑,需要更换干净的美国住宅IP。

内容的提问来源于stack exchange,提问作者CursedMun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:39:34