【问题标题】:How to get domain name from shortened URL with Javascript?如何使用 Javascript 从缩短的 URL 中获取域名?
【发布时间】:2015-05-08 04:32:25
【问题描述】:

假设我有一个我想用前端技术阻止的域列表。我想阻止该域托管的任何 URL。在我的头上,我有以下方法:

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

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

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

【问题讨论】:

  • 你要使用ajax吗?
  • @tuananh 啊,这是个好主意。我实际上需要这个功能来进行 chrome 扩展。那么也许这可以帮助“跨域”脚本编写?

标签: javascript regex url dns


【解决方案1】:

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

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


另一种选择是,如果链接缩短器是您可以访问 API 的已知链接,那么您可以查询该 API 以查看给定缩短链接的快捷方式。例如,bit.ly 有这个 apihttp://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。

【讨论】:

    【解决方案2】:

    看来您必须进行 http 调用并查看响应才能完成此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2010-10-08
      • 2018-09-08
      • 2014-12-01
      相关资源
      最近更新 更多