2016-05-13 52 views
1

我一直在一個問題上停留了很長一段時間。我有以下代碼:如何從Java中的重定向鏈接過濾空格?

String fileUrl = "example.com/some_redirect_page_to_a_download_page.html"; 
URL url = new URL(fileURL); 
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
httpConn.addRequestProperty("User-Agent", "Mozilla/4.76"); 
int responseCode = httpConn.getResponseCode(); 

這是試圖在嘗試連接到URL時獲取響應代碼。對於我輸入的大多數下載鏈接,它會返回響應碼200,這正是我想要的。但是,對於某些下載鏈接,它會返回505.我一直在這裏搜索互聯網上的問題,並且我發現答案是:鏈接中有空格。問題是,在我從最終鏈接獲取文件之前,我使用的所有鏈接都是第一次重定向。 HttpURLConnection自動遵循所有這些重定向,但愚蠢地保留最終鏈接中的空格,我得到的錯誤代碼爲505.另外,HttpURLConnection中似乎沒有任何字段,我可以從中獲取此最終鏈接從它自己刪除它的空間。

例子:

String fileUrl = "http://www.planetminecraft.com/project/hillside-manor/download/schematic/"; 
URL url = new URL(fileURL); 
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
httpConn.addRequestProperty("User-Agent", "Mozilla/4.76"); 
int responseCode = httpConn.getResponseCode(); 
return responseCode; 

這將返回以下錯誤:

java.io.IOException: Server returned HTTP response code: 505 for URL: http://static.planetminecraft.com/files/resource_media/schematic/Hillside Manor v10.schematic 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1840) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) 
at PMCParser.getFinalURL(PMCParser.java:47) 
at PMCParser.getFinalURL(PMCParser.java:51) 
at PMCParser.getFileSize(PMCParser.java:136) 
at PMCParser.seekByTitle(PMCParser.java:76) 
at PMCParser.run(PMCParser.java:37) 

有沒有人對如何解決這個任何線索?

+0

也許:http://www.checkupdown.com/status/E505.html – 2016-05-13 20:16:59

+0

@RC。感謝您試圖幫助。我知道如何解決505錯誤,我只是沒有我需要的東西(我試圖連接到的實際URL)來解決問題... –

+0

嘗試替換(「」,「」);在URL上,它將首先用空白或替換(「」,「+」)替換空格;如果你需要url格式的空間。 – Leo

回答

0

雖然我沒有測試過自己,我建議你禁用自動重定向以下內容:

HttpURLConnection.setFollowRedirects(false); 

...這樣就可以攔截任何3xx的返回碼,然後閱讀在Location返回的URL頭,並通過URLEncoder.encode正確編碼。

(我只是希望你沒有SecurityManager,它可以阻止你調用setFollowRedirects)。