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

如何用superagent获取301重定向前的原始HTML代码?

如何用superagent获取http://sf.gg的原始301响应页面

嘿,这个问题我来帮你搞定!你提到的superagent确实自带自动跟随重定向的功能,而且默认就是开启的(最多会跟随5次重定向)。但如果你想拿到像curl那样的原始301 HTML页面,只需要禁用自动重定向就可以了,具体操作很简单:

步骤1:安装superagent(如果还没装)

首先确保你已经安装了superagent,没装的话执行:

npm install superagent

步骤2:编写代码获取原始301响应

superagent提供了.redirects(n)方法,用来设置允许跟随的最大重定向次数。当我们把次数设为0时,就会完全停止跟随重定向,直接返回原始的301响应。

不过要注意:默认情况下superagent会把3xx状态码当成错误抛出,所以我们可以通过两种方式处理:

方式一:在catch块中捕获301响应

const superagent = require('superagent');

async function fetchOriginal301() {
  try {
    const res = await superagent.get('http://sf.gg')
      .redirects(0); // 关闭自动重定向
  } catch (err) {
    // 这里的err其实包含了我们需要的301响应
    if (err.response && err.response.status === 301) {
      console.log('状态码:', err.response.status);
      console.log('跳转目标:', err.response.headers.location); // 输出https://segmentfault.com
      console.log('原始HTML内容:\n', err.response.text); // 就是你用curl拿到的301页面
    } else {
      // 处理其他真正的错误,比如网络连接失败
      console.error('请求异常:', err);
    }
  }
}

fetchOriginal301();

方式二:用.ok()自定义成功状态码

如果你不想进入catch块,可以用.ok()方法告诉superagent,301状态码也是我们要的“成功”响应:

const superagent = require('superagent');

async function fetchOriginal301() {
  try {
    const res = await superagent.get('http://sf.gg')
      .redirects(0)
      .ok(res => res.status === 301); // 仅把301视为成功响应

    console.log('状态码:', res.status);
    console.log('跳转目标:', res.headers.location);
    console.log('原始HTML内容:\n', res.text);
  } catch (err) {
    console.error('请求异常:', err);
  }
}

fetchOriginal301();

原理说明

superagent的Following redirects功能默认是开启的,它会自动处理3xx状态码,跳转到Location头指向的地址。而我们通过.redirects(0)关闭这个功能后,就能直接获取到http://sf.gg返回的原始301响应,包括你需要的那个HTML页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:34:45