NodeJS-检查外部URL的协议

问题描述 投票:0回答:1

是否可以使用NodeJS检查外部站点的协议是什么。

例如,出于缩短URL的目的,人们可以提供一个URL,如果他们省略http或https,我会检查它应该是哪个并添加它。

我知道我可以不使用协议就重定向用户,但是我很好奇是否有办法检查它。

谢谢!

node.js redirect
1个回答
1
投票

当然可以。首先安装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的其余部分,以减轻以某种方式滥用该网站的风险。整个站点的协议应该相同。

© www.soinside.com 2019 - 2024. All rights reserved.