如何从缩短的 URL 和 Javascript 中获取域名?
How to get domain name from shortened URL with Javascript?
假设我有一个要使用前端技术阻止的域列表。我想阻止域托管的任何 URL。在我的头顶上,我有以下方法:
- 正则表达式
string.split("/")
location.hostname
但是如果 URL 是一个缩短的呢?例如https://goo.gl/lWyZ5B
。以上所有方法都会 return 不希望的结果:goo.gl
。
这实际上是我正在计划的 Chrome 扩展的一部分。所以也许 Chrome 可以获取缩短的 URL 然后如果结果在阻止列表中则重定向到警告页面?
了解缩短的 URL 背后的真实主机的唯一方法是实际尝试获取 URL 然后查看是否获得 302 重定向并查看重定向的内容URL 是。
由于您通常无法从浏览器 URL 中加载跨源 Javascript,您可能需要一个服务器来为您执行此操作,并将结果 return你.
另一种选择是,如果 link 缩短器是您可以 API 访问的已知缩短器,那么您可以查询 API 以查看给定的缩短 link是一个快捷方式。例如,bit.ly 有这个 api http://dev.bitly.com/data_apis.html。 API 通常允许跨源访问,因此您可以从浏览器访问它。
由于您无法自信地 API 访问所有可能的 link 起酥油,因此此策略实际上仅适用于您准备的特定 link 起酥油。任何 link 缩短器的通用解决方案需要使用服务器直接访问 URL 以获取重定向。
例如,这是一个简单的 node.js 程序,它获取 URL 并检查它是否 return 是重定向响应,如果是则获取重定向 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 作为请求并 return 结果 URL.
看来您必须进行 http 调用并查看响应才能完成此操作。
假设我有一个要使用前端技术阻止的域列表。我想阻止域托管的任何 URL。在我的头顶上,我有以下方法:
- 正则表达式
string.split("/")
location.hostname
但是如果 URL 是一个缩短的呢?例如https://goo.gl/lWyZ5B
。以上所有方法都会 return 不希望的结果:goo.gl
。
这实际上是我正在计划的 Chrome 扩展的一部分。所以也许 Chrome 可以获取缩短的 URL 然后如果结果在阻止列表中则重定向到警告页面?
了解缩短的 URL 背后的真实主机的唯一方法是实际尝试获取 URL 然后查看是否获得 302 重定向并查看重定向的内容URL 是。
由于您通常无法从浏览器 URL 中加载跨源 Javascript,您可能需要一个服务器来为您执行此操作,并将结果 return你.
另一种选择是,如果 link 缩短器是您可以 API 访问的已知缩短器,那么您可以查询 API 以查看给定的缩短 link是一个快捷方式。例如,bit.ly 有这个 api http://dev.bitly.com/data_apis.html。 API 通常允许跨源访问,因此您可以从浏览器访问它。
由于您无法自信地 API 访问所有可能的 link 起酥油,因此此策略实际上仅适用于您准备的特定 link 起酥油。任何 link 缩短器的通用解决方案需要使用服务器直接访问 URL 以获取重定向。
例如,这是一个简单的 node.js 程序,它获取 URL 并检查它是否 return 是重定向响应,如果是则获取重定向 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 作为请求并 return 结果 URL.
看来您必须进行 http 调用并查看响应才能完成此操作。