下面這段代碼應打印出網站的新位置,它使用Location
頭重定向到一個新的網頁/文件(http://somepagethatredirects.me/after.txt
):的Java URLConnection.getURL()只重定向後看似無關的方法被稱爲
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: 正如傑弗裏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());
@JeffreyBosboom好主意,但'urlConnection.connect()'不會「更新」URL,我只是檢查它。我將它添加到問題中的方法中,並編寫另一個示例代碼。 – linkD
[URLConnection.getURL()](https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#getURL())會返回您連接的原始網址,而不是''Location'頭,你不能從你連接的url中讀取任何東西,直到你通過調用'connect'建立了連接。 – Dummy
@Dummy我不明白爲什麼'urlConnection.getURL()'返回新的不過,在我調用'urlConnection.getHeaderFields()'或'urlConnection.getExpiration()'後,我已經被重定向到了URL。 – linkD