Node.js-DNS.Lookup是否使用HTTP拒绝URL?

时间:2018-12-09 23:11:29

标签: javascript node.js http dns lookup

我正在尝试在Node.js中构建一个Api,该Api需要一个URL并检查其是否为有效网站。

现在,dns.lookup拒绝任何无效的URL(伪造的网站),并接受任何有效的URL,只要它们不是以HTTP://或HTTPS://开头。这是有问题的,因为有效的URL被拒绝了。

因此,此URL会生成“无错误”消息:

dns.lookup('www.google.ca', function onLookup(err, address, family) 
  if (err == null) {
    console.log ('No Errors: ' + err + ' - ' + address + ' - ' + family) 
  } else {
    console.log ('Errors: ' + err + ' -- ' + address + ' -- ' + family)
  }
});

此带有HTTPS的URL会生成“错误”消息:

dns.lookup('https://www.google.ca/', function onLookup(err, address, family) 
  if (err == null) {
    console.log ('No Errors: ' + err + ' - ' + address + ' - ' + family) 
  } else {
    console.log ('Errors: ' + err + ' -- ' + address + ' -- ' + family)
  }
});

console.log输出:

错误:错误:getaddrinfo ENOTFOUND http://www.google.ca/-未定义-未定义

是否可以将dns.lookup配置为接受以HTTP或HTTPS开头的URL?

1 个答案:

答案 0 :(得分:1)

dns.lookup使用主机名。协议不是主机名的一部分,因此不应将其传递。只需通过正则表达式从URL中删除http / https,然后再将其传递给dns.lookup函数:

const url1 = 'https://google.ca';
const url2 = 'google.com';

const REPLACE_REGEX = /^https?:\/\//i

const res1 = url1.replace(REPLACE_REGEX, '');
const res2 = url2.replace(REPLACE_REGEX, '');

console.log(res1);
console.log(res2);

// dns.lookup(res1...);