是否可以使用NodeJS检查外部站点的协议是什么。
例如,出于缩短URL的目的,人们可以提供一个URL,如果他们省略http或https,我会检查它应该是哪个并添加它。
我知道我可以不使用协议就重定向用户,但是我很好奇是否有办法检查它。
谢谢!
当然可以。首先安装request-promise
及其依赖项request
:
npm install request request-promise
现在,我们可以编写一个异步函数来获取可能缺少其协议的URL,并在必要时添加它:
const rq = require('request-promise');
async function completeProtocol(url) {
if (url.match(/^https?:/)) {
// fine the way it is
return url;
}
// https is preferred
try {
await rq(`https://${url}`, { method: 'HEAD' });
// We got it, that's all we need to know
return `https://${url}`;
} catch (e) {
return `http://${url}`;
}
}
请记住,发出这样的请求可能会占用您服务器上的资源,尤其是如果有人向其中的很多垃圾邮件发送。您可以通过在调用timeout: 2000
时传递rq
作为选项来缓解这种情况。
[也请考虑仅请求网站主页,解析URL的其余部分,以减轻以某种方式滥用该网站的风险。整个站点的协议应该相同。