我有两个 url 作为 Java 字符串假设“youtube.com”和“goo.gl/ur2l”,我想创建一个函数
boolean isSame(String url1, String url2)
它将天气两个 url 返回到最后是否直接指向相同的 url。这将如何在 java 中实现?
我有两个 url 作为 Java 字符串假设“youtube.com”和“goo.gl/ur2l”,我想创建一个函数
boolean isSame(String url1, String url2)
它将天气两个 url 返回到最后是否直接指向相同的 url。这将如何在 java 中实现?
对每个 URL 执行 HTTP 请求并检查 HTTP 代码。如果是重定向 ( 30*
),请提取Location
HTTP 标头,这应该是“原始”URL。
您需要将字符串转换为 IP 地址,然后进行比较。像这样的东西:
InetAddress address = null;
byte[] ip = new byte[0];
try {
address = InetAddress.getByName("google.com");
ip = address.getAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
我只是将http://www.youtube.com URL缩短为http://bit.ly/9b2Y3D。现在,当我使用curl访问后者时,我得到:
$ curl http://bit.ly/9b2Y3D
[...]
> GET /9b2Y3D HTTP/1.1
[...]
< HTTP/1.1 301 Moved
[...]
< Location: http://youtube.com/
您会看到,缩短的 URL 返回 302 而不是 200 OK。标题也Location
很有趣。我想你现在有很多信息可供初学者使用。尝试 HttpClient 并提取状态代码和Location
. 然后看看URL
类,特别是它是如何实现equals()
的。
您需要遵循 302 重定向,直到找到大约 200 个 http 代码。请进行配置以避免遵循无限重定向:)