在进行网络请求的时候,有可能会遇上服务器指定链接跳转的情况。此时,无论是 301(永久转移)还是 302(暂时转移),在请求页面的时候都需要根据服务器的指示,去访问下一个链接。当然,这里下一个链接依然有可能是跳转链接,需要继续执行跳转操作。
一段可用的 Node.js 代码如下:
const http = require('http');
const https = require('https');
function fetch(link) {
return new Promise((resolve) => {
const { get } = link.startsWith('https') ? https : http;
get(link, response => {
if (response.statusCode >= 300 && response.statusCode < 400) {
const { location } = response.headers;
return fetch(location).then(resolve);
}
resolve(response.headers['set-cookie']);
});
});
}
这里,Node.js 处理 HTTP 和 HTTPs 请求使用的模块是不相同的,因而需要根据链接地址的 protocol 进行按需索取。同时,如果是 3xx 的 HTTP 结果,则需要进行链接跳转。可以直接读取 headers 中的 location
数据,找到下一步需要跳转到的位置。