Java URLConnection.getURL()仅在调用看似未连接的方法后重定向

时间:2017-01-01 23:48:16

标签: java urlconnection

以下代码段应打印出使用Location标题重定向到新页面/文件(http://somepagethatredirects.me/after.txt)的网站的新位置:

URL website = new URL("http://somepagethatredirects.me/before.txt");
URLConnection urlConnection = website.openConnection();
System.out.println(urlConnection.getURL());

即使我们希望该位置为http://somepagethatredirects.me/after.txt,我们也会获得指定的URL参数。

添加(看似无关的)方法,例如urlConnection.getHeaderField("Location")urlConnection.getHeaderFields()或甚至urlConnection.getExpiration(),会(奇怪地)给我们预期的结果:

URL website = new URL("http://somepagethatredirects.me/before.txt");
URLConnection urlConnection = website.openConnection();
urlConnection.getHeaderFields();
System.out.println(urlConnection.getURL());

这是预期的行为吗?这对我来说似乎是个错误。

修改1 : 正如Jeffrey Bosbom指出的那样,调用urlConnection.openConnection()实际上并没有建立与服务器的连接,urlConnection.connect()确实(或其他隐含有效连接的方法)。但这并没有改变程序的输出:

URL website = new URL("http://somepagethatredirects.me/before.txt");
URLConnection urlConnection = website.openConnection();
urlConnection.connect();
System.out.println(urlConnection.getURL());

1 个答案:

答案 0 :(得分:0)

在您执行以下任何操作之前,HTTP事务都不会发生:

  • 获取响应代码
  • 打开输入流
  • 打开错误流。

我不确定即使在此之后您有任何期望getURL()提供最终目标网址的依据。