如何用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
相关产品推荐
相关产品推荐

