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

如何通过Fetch请求获取重定向页面?遇401状态码问题

问题排查与修复方案

核心差异分析

对比你的代码和Insomnia生成的代码,几个关键问题导致了401错误:

  1. Cookie头重复拆分:你同时传了cookie和Cookie两个头,服务器大概率无法正确合并识别所有凭证;而Insomnia是把CSRF和JSESSIONID合并到一个Cookie头里,仅额外保留了一个冗余的cookie头(核心是完整凭证在同一个头中)。
  2. Content-Type不匹配:你设置了text/html类型,但目标服务器在Insomnia请求里接受的是multipart/form-data(虽然GET请求带body不符合HTTP规范,但部分服务器会特殊处理)。
  3. Node环境下credentials无效:credentials: "include"是浏览器专属参数,node-fetch/isomorphic-fetch在Node环境下不支持,凭证必须完全通过Cookie头传递。

修复后的代码

async function getPage(cookie, jsid) {
  // 把所有Cookie合并到一个头,格式要确保是 "csrf-token-name=xxx; csrf-token-value=xxx; JSESSIONID=xxx"
  const combinedCookie = `${cookie}; ${jsid}`;
  
  const params = {
    method: "GET",
    headers: {
      "Cookie": combinedCookie,
      "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"
      // 删掉多余的content-type和重复的cookie头
    },
    redirect: "follow",
    // Node环境下不需要credentials参数,直接靠Cookie头传凭证
  };

  console.log("请求参数:", params);

  try {
    const res = await fetch('https://portal.elpts.ru/portal', params);
    console.log("响应状态:", res);
    // 注意:原页面是HTML,这里用text解析,Insomnia里的json是自动生成的,可能不符合实际响应
    const content = await res.text();
    console.log("响应内容:", content);
  } catch (err) {
    console.error("请求错误:", err);
  }
}

额外注意点

  • Cookie格式要准确:确认cookie参数包含完整的CSRF凭证(csrf-token-name=csrftoken; csrf-token-value=xxx),jsid参数是JSESSIONID=xxx格式,合并后不要有多余的分号或空格。
  • GET请求的Body:Insomnia生成的代码加了FormData body,但GET请求带body不符合HTTP标准,建议先移除;如果服务器强制要求,再引入form-data库并添加body: new FormData()。
  • fetch库版本:尽量用node-fetch v2.x版本(v3.x是ESM模块,容易出现兼容性问题),isomorphic-fetch在Node环境下依赖node-fetch,版本要匹配。

内容的提问来源于stack exchange,提问作者lian. lun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:10:32