4

我有两个 url 作为 Java 字符串假设“youtube.com”和“goo.gl/ur2l”,我想创建一个函数

boolean isSame(String url1, String url2)

它将天气两个 url 返回到最后是否直接指向相同的 url。这将如何在 java 中实现?

4

4 回答 4

3

对每个 URL 执行 HTTP 请求并检查 HTTP 代码。如果是重定向 ( 30*),请提取LocationHTTP 标头,这应该是“原始”URL。

于 2012-05-13T17:50:52.227 回答
1

您需要将字符串转换为 IP 地址,然后进行比较。像这样的东西:

   InetAddress address = null;

    byte[] ip = new byte[0];

    try {
    address = InetAddress.getByName("google.com");
    ip = address.getAddress();
    } catch (UnknownHostException e) {
    e.printStackTrace();
    }
于 2012-05-13T17:51:36.617 回答
1

我只是将http://www.youtube.com URL缩短为http://bit.ly/9b2Y3D访问后者时,我得到:

$ 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()的。

于 2012-05-13T17:53:01.483 回答
1

您需要遵循 302 重定向,直到找到大约 200 个 http 代码。请进行配置以避免遵循无限重定向:)

于 2012-05-13T17:55:46.920 回答