如何使用Javascript从缩短的URL获取域名?

时间:2015-05-08 04:32:26

标签: javascript regex url dns

假设我有一个我想用前端技术阻止的域列表。我想阻止域托管的任何URL。我最重要的是我有以下方法:

  • 正则表达式
  • string.split("/")
  • location.hostname

但是,如果URL是缩短的,该怎么办?例如https://goo.gl/lWyZ5B。所有上述方法都会返回不需要的结果:goo.gl

这实际上是我计划的Chrome扩展程序的一部分。那么,如果结果在阻止列表中,那么Chrome可以获取缩短的URL然后重定向到警告页面吗?

2 个答案:

答案 0 :(得分:3)

了解缩短网址背后真正主机的唯一方法是实际尝试获取网址,然后查看是否获得302重定向并查看重定向网址是什么。

由于您通常无法在浏览器Javascript中加载跨源URL,因此您可能需要服务器为您执行此操作并将结果返回给您。

另一个选项是,如果链接缩短程序是您具有API访问权限的已知链接,则可以查询该API以查看给定缩短链接的快捷方式。例如,bit.ly有这个api http://dev.bitly.com/data_apis.html。 API通常允许跨源访问,因此您可以从浏览器访问它。

由于您无法自信地获得所有可能的链接缩短程序的API访问权限,因此该策略实际上仅适用于您准备的特定链接缩短程序。任何链接缩短程序的一般解决方案都需要使用服务器直接访问URL以获取重定向。

例如,这是一个简单的node.js程序,它提取URL并检查它是否返回重定向响应,如果是,则获取重定向URL。

var request = require("request");

request({url: "https://goo.gl/lWyZ5B", followRedirect: false}, function(error, response, body) {
    console.log(response.statusCode);
    if (response.statusCode >= 300 && response.statusCode < 400) {
        console.log(response.headers.location);
    }
});

这会生成此输出:

301
https://www.youtube.com/watch?v=ZrU_tt4R3xY

这可以包装在一个服务器中,该服务器将URL作为请求并返回结果URL。

答案 1 :(得分:0)

似乎你必须进行http调用并查看响应才能完成此任务。

相关问题