java, android, resolve an url, get redirected uri

2022-09-03 03:30:49

我有一个受身份验证保护的网址:www.domain.com/alias

当请求时将返回另一个url:www.another.com/resource.mp4(不受保护)

我想知道Java中是否存在一个方法,该方法将从给定的URL返回真正的url。类似:秒 = 解析(first)

我正在考虑加载第一个并尝试读取响应,也许是位置属性,但由于我不是Java大师,我想知道Java是否已经面临这种情况。


答案 1

这是我曾经遇到的关于URL重定向的问题。请尝试以下代码:

URL url = new URL(url);
HttpURLConnection ucon = (HttpURLConnection) url.openConnection();
ucon.setInstanceFollowRedirects(false);
URL secondURL = new URL(ucon.getHeaderField("Location"));
URLConnection conn = secondURL.openConnection();

这里的“魔术”发生在以下2个步骤中:

ucon.setInstanceFollowRedirects(false);
URL secondURL = new URL(ucon.getHeaderField("Location"));

默认情况下,实例跟踪重定向设置为 true,但您希望将其设置为 false 以捕获第二个 URL。为了能够从第一个URL中获取第二个URL,您需要获取名为“位置”的标题字段。


答案 2

我已经通过使用第7层协议过滤器在我们拥有MikroTik路由器的网站上消除了这个问题,如下所示。这并不能帮助设备脱离WiFi网络(显然),但至少在它们连接到家庭和/或工作WiFi网络时给它们一些缓解。

首先,创建协议定义:

/ip firewall layer7-protocol
add comment="Frigging javascript redirects on chrome browsers" \
    name=Javascript_Redirect \
    regexp="^.+(spaces.slimspot.com|mostawesomeoffers.com).*\$"

现在,实际过滤掉这些流量

/ip firewall filter
add action=drop chain=forward comment=\
    "Block and log Javascript_Redirect L7 Protocol" layer7-protocol=\
    Javascript_Redirect log=yes log-prefix=JSredirect_

具有第 7 层过滤能力的其他防火墙也可以以类似的方式阻止这些重定向。