如何使用 Javascript 找出短网址指向的位置
How To Find Out Where the Short URLs Point To with Javascript
我创建了一个短 url,假设 https://my.short.link/foo
,它指向 https://my.other.website/bar
。
如何在浏览器中使用 javascript 方法检索此 url? (我正在使用 angular)
这将取决于 my.short.link
如何在您请求时处理 URL。
- 类型 1:真正基本的服务可能使用 redirection response(HTTP 302 等)。
- 类型 2:或者它可能使用一个成功的响应服务于一个带有
<meta http-equiv="refresh" ...>
标签的 HTML 页面。
- 类型 3:或者它可能使用成功的响应为 HTML 页面提供服务,通过 JavaScript.
进行重定向
浏览器
如果您想在浏览器中执行此操作,您可能能够获取上述服务类型 1 的信息,但不能获取其他服务的信息。
作为 , you could try fetch
,令人惊讶的是(对我来说!)如果 该服务通过简单的重定向响应处理请求,您会看到一个新的 URL在响应中,但它不会包含哈希片段:
fetch("https://tsplay.dev/wEv6gN")
.then(r => {
if (!r.ok) {
throw new Error(`HTTP error ${r.status}`);
}
for (const [key, value] of r.headers) {
console.log(`${key}: ${value}`);
}
console.log(r.url);
})
.catch(console.error);
URL、https://tsplay.dev/wEv6gN
通过 302(“永久移动”)重定向响应重定向到 https://www.typescriptlang.org/play?#code/MYewdgzgLgBAJgQygmBeGB5ARgKwKbBQB0AZgE554BeeAFAN4CwAUDGzBCALZ4BcMARgBMAZgA0LdjAA24AOb96AIgRLeSrEoC+E1u2kBLaPwDaS4EoC6uqSBL8lSm+wRksBqGVcBPfmACu0tLObFAAFgZgchD8AkRCuloAlADcLCxQ3gAOePBICAD6ANZ43mgwJd52MJk51YjIacwsJP5ghAbg8CAA6iBkRbRF-A2FlUkwTHps0niwAG4I0v656KMmRZZNUgD0O0QHLFpAA
。在上面的代码中,我们只看到 https://www.typescriptlang.org/play?
。但也许这足以满足您的目的。
但这不适用于上面的类型 2 和类型 3。您必须能够读取和解析 HTML,而 Same Origin Policy 将阻止源代码 运行 访问 HTML。您可以尝试在 iframe
中打开它(尽管我怀疑您真的不想 访问 页面,您只想获取它的 URL),但同样的问题也适用:即使 iframe
到达目标位置,由于 SOP,您也无法访问它。
Node.js 或类似
如果你的意思是在 Node.js 或其他一些 non-browser 环境中,那么:
- 对于 Type 1 服务,您可以执行 HTTP 请求并查看重定向信息。
- 对于类型 2 服务,您可以执行 HTTP 请求,解析 HTML,然后查找标签。
- 对于 Type 3,您需要使用无头浏览器(Puppeteer 等)来捕捉它的去向。
我创建了一个短 url,假设 https://my.short.link/foo
,它指向 https://my.other.website/bar
。
如何在浏览器中使用 javascript 方法检索此 url? (我正在使用 angular)
这将取决于 my.short.link
如何在您请求时处理 URL。
- 类型 1:真正基本的服务可能使用 redirection response(HTTP 302 等)。
- 类型 2:或者它可能使用一个成功的响应服务于一个带有
<meta http-equiv="refresh" ...>
标签的 HTML 页面。 - 类型 3:或者它可能使用成功的响应为 HTML 页面提供服务,通过 JavaScript. 进行重定向
浏览器
如果您想在浏览器中执行此操作,您可能能够获取上述服务类型 1 的信息,但不能获取其他服务的信息。
作为 fetch
,令人惊讶的是(对我来说!)如果 该服务通过简单的重定向响应处理请求,您会看到一个新的 URL在响应中,但它不会包含哈希片段:
fetch("https://tsplay.dev/wEv6gN")
.then(r => {
if (!r.ok) {
throw new Error(`HTTP error ${r.status}`);
}
for (const [key, value] of r.headers) {
console.log(`${key}: ${value}`);
}
console.log(r.url);
})
.catch(console.error);
URL、https://tsplay.dev/wEv6gN
通过 302(“永久移动”)重定向响应重定向到 https://www.typescriptlang.org/play?#code/MYewdgzgLgBAJgQygmBeGB5ARgKwKbBQB0AZgE554BeeAFAN4CwAUDGzBCALZ4BcMARgBMAZgA0LdjAA24AOb96AIgRLeSrEoC+E1u2kBLaPwDaS4EoC6uqSBL8lSm+wRksBqGVcBPfmACu0tLObFAAFgZgchD8AkRCuloAlADcLCxQ3gAOePBICAD6ANZ43mgwJd52MJk51YjIacwsJP5ghAbg8CAA6iBkRbRF-A2FlUkwTHps0niwAG4I0v656KMmRZZNUgD0O0QHLFpAA
。在上面的代码中,我们只看到 https://www.typescriptlang.org/play?
。但也许这足以满足您的目的。
但这不适用于上面的类型 2 和类型 3。您必须能够读取和解析 HTML,而 Same Origin Policy 将阻止源代码 运行 访问 HTML。您可以尝试在 iframe
中打开它(尽管我怀疑您真的不想 访问 页面,您只想获取它的 URL),但同样的问题也适用:即使 iframe
到达目标位置,由于 SOP,您也无法访问它。
Node.js 或类似
如果你的意思是在 Node.js 或其他一些 non-browser 环境中,那么:
- 对于 Type 1 服务,您可以执行 HTTP 请求并查看重定向信息。
- 对于类型 2 服务,您可以执行 HTTP 请求,解析 HTML,然后查找标签。
- 对于 Type 3,您需要使用无头浏览器(Puppeteer 等)来捕捉它的去向。