URLConnection.getURL 方法

Posted

技术标签:

【中文标题】URLConnection.getURL 方法【英文标题】:URLConnection.getURL method 【发布时间】:2014-01-19 04:19:06 【问题描述】:

我想对一小段 Java 代码有第二个意见。

下面的方法总是会返回一个等于输入字符串的输出字符串吗?

private static String func(final String url)

    HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();
    con.setInstanceFollowRedirects(true);
    ...
    ...
    return con.getURL().toString();

问题是指所有可能的场景,例如自动重定向等

【问题讨论】:

添加了 'con.setInstanceFollowRedirects(true)';答案仍然成立吗? 【参考方案1】:

如果您查看URLConnection.getUrl() implementation,您可以看到它返回传递给构造函数的原始 URL。

HttpURLConnection 也不会改变原来的 url。

要获取重定向的目标 URL,您应该调用 con.getHeaderField("Location"); - 例如:Retrieve the final location of a given URL in Java

因此,在您调用 connect() 或其他导致建立连接的方法之前,您将获得原始 URL。

如果您设置了((HttpURLConnection)con).setInstanceFollowRedirects(true);,那么在connect() 之后,如果它真的重定向,您将获得目标网址。

重定向可能不会自动发生,例如当协议更改时(例如 http -> https)。

【讨论】:

你确定吗?如果我调用 con.setInstanceFollowRedirects(true) 会怎样? 在这种情况下,在调用 connect() 或其他导致连接的方法之前,您将获得原始 URL。在 connect() with follow redirects true 之后,如果它真的遵循重定向,您将获得目标 URL(例如,如果协议更改:http -> https,则不会)。 所以基本上,你在这里说的意思是上面的答案是不正确的,对吧? 是的,现在也添加了另一种情况。顺便说一句,很难验证,因为 HttpURLConnection 只是一个抽象类,我猜实际实现是平台相关的......所以不同平台上的确切行为实际上可能不同......

以上是关于URLConnection.getURL 方法的主要内容,如果未能解决你的问题,请参考以下文章

UR #5怎样更有力气

UOJ#21UR #1缩进优化

英语中ir和ur发音规则

er.or.ir.ur四个字母组合发音有啥规律?

UR选刷

说一下ir,ur,or字母组合分别发啥音?