2011-07-08 26 views
1

我碰到一個HTTP 302頁說Location: //-now-playing.html(這看起來奇怪,因爲通常它是完整的URL,即Location: http://www.somewhere.else),並導致我HttpURLConnection concon.setFollowRedirects(true)失敗。但是,我的瀏覽器不會因此指令而失敗。在這種情況下,如何獲得true URL?如何在Java中的http 302重定向中獲取新的URL?

您可以通過在www.web-sniffer.net嘗試這個網址http://cinemaclock.com/showtimes/ont/Toronto/43844/The_Trip看到在這種情況下,完整的請求和響應。謝謝。

編輯:謝謝大家。我發現這是一個錯誤的URL的情況。虛驚一場,但謝謝大家。

+0

在Chrome 12.0.742.112(「無法找到服務器 - 當前播放.html」)時,它失敗了。您的瀏覽器必須在處理格式錯誤的HTTP響應方面比Chrome更好:) –

回答

0

首先,至少在我的電腦上,Safari和Chrome都無法在這個重定向,所以看來最常見的行爲就是返回一個錯誤並失敗,這可能是你實際想要返回給用戶的行爲。

如果你仍然想插入適當的URL而不是失敗,你會可能必須對Location:重定向字段進行特殊情況分析才能解釋損壞的URL。

0

你通過看Location:頭的值做正確的事。

不幸的是,你剛剛一個壞的URL在這裏! :-(

+0

順便說一句,這是與Firefox 4.0.1。 –

1

這是一個錯誤,你需要自己處理您可以通過獲得位置:

con.getHeaderField("Location"); 
0

您可能只有一個不好的回報,或者您有一個absolte位置重定向,沒有其主機名,在這裏繼續。

雖然標準說,一個位置的響應應該有一個完整的absoulteURI,大多數瀏覽器和軟件處理沒有問題的相對位置響應。

這一個在它前面有兩個正斜槓,這當然是不好的形式,但是大多數服務器會自動假定兩個//在一個URL中一起意味着只有一個,所以服務器通常會服務於同一頁面if你要說要求http://www.xyz.com/index.html,並要求http://www.xyz.com//index.html

現在,爲了解決您的問題,如果這確實意味着作爲一個相對URL重定向,您將需要從標題信息構建絕對URL。首先,由於其相對位置重定向其安全地說,協議是你使用HTTP的一個相同的,所以這就是URL的第一部分,你應該嘗試:

的http://

接下來的部分你需要的是主機名,這應該是在HTTP報頭響應的HOST可變..(www.xyz.com)

http://www.xyz.com

和最後路徑,這簡直是什麼標題的位置與反應附在上面

http://www.xyz.com/-now-playing.html

最簡單的測試方法是簡單地啓動一個瀏覽器,並嘗試查看該請求是否能將您帶到任何地方。對我來說,它看起來像一個不好的URL,因爲html文件名以連字符開頭,這是一種不尋常的形式,但我至少會試着去查看是否構建了URL。

祝你好運。