我想对一小部分Java代码有第二种看法。
下面的方法总是返回一个与输入字符串相等的输出字符串吗?
private static String func(final String url)
{
HttpURLConnection con = (HttpURLConnection)new URL(url).openConnection();
con.setInstanceFollowRedirects(true);
...
...
return con.getURL().toString();
}这个问题涉及所有可能的场景,例如自动重定向等。
发布于 2014-01-01 17:39:49
如果您查看URLConnection.getUrl()实现,可以看到它返回传递给构造函数的原始URL。
HttpURLConnection也不会更改原始的url。
要获得重定向的目标URL,您应该调用con.getHeaderField("Location");-例如,请参见:检索Java中给定URL的最终位置
因此,在调用connect()或其他导致建立连接的方法之前,您将获得原始的URL。
如果您设置了((HttpURLConnection)con).setInstanceFollowRedirects(true);,那么在connect()之后,如果它真的重定向,您将得到目标URL。
重定向可能不会自动发生,例如,当协议更改时(例如,http -> https)。
https://stackoverflow.com/questions/20870733
复制相似问题