2010-09-02 175 views
15

我在我的代碼中有基於HTML的查詢,並且在收到來自服務器的505響應後,一種特定類似乎會引起IOExceptions。我和其他似乎有類似問題的人一起查了一下505的迴應。顯然,505代表HTTP版本不匹配,但是當我將相同的查詢URL複製到任何瀏覽器(嘗試過Firefox,seamonkey和Opera)時,似乎沒有問題。我閱讀的其中一篇帖子表明,瀏覽器可能會自動處理版本不匹配問題。java.io.IOException:服務器返回HTTP響應代碼505

我試圖通過使用Opera自帶的漂亮開發人員工具深入挖掘,而且看起來好像沒有任何不匹配版本(我相信Java使用HTTP 1.1),並收到一個很好的200 OK響應。爲什麼在同一個查詢通過我的Java代碼時遇到問題?

 private InputStream openURL(String urlName) throws IOException{  
    URL url = new URL(urlName); 
    URLConnection urlConnection = url.openConnection(); 
    return urlConnection.getInputStream(); 
} 

樣品鏈接:http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length

回答

38

出現了一些問題,在Tomcat中與它含有空間中,URL。要解決此問題,您需要使用URLEncoder對您的網址進行編碼。

實施例(注意空間):

String url="http://example.org/test test2/index.html"; 
String encodedURL=java.net.URLEncoder.encode(url,"UTF-8"); 
System.out.println(encodedURL); //outputs http%3A%2F%2Fexample.org%2Ftest+test2%2Findex.html 
+0

我對Tomcat 7.0.8也有同樣的問題,需要對其中一個參數進行編碼。但還有更多:如果使用Firefox,請求可以通過Tomcat完美處理! – Pragmateek 2011-05-17 22:21:08

+0

謝謝!我有同樣的問題,你的答案解決了我的問題。 – 2012-06-20 08:40:30

+3

我用%20替換了我網址中的空格。謝謝,這個固定問題 – Chris 2013-10-30 16:50:02

2

你身後的代理?此代碼適用於我,並打印出我通過瀏覽器看到的相同文本。

final URL url = new URL("http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length"); 
final URLConnection conn = url.openConnection(); 
final InputStream is = conn.getInputStream(); 
System.out.println(IOUtils.toString(is)); 

connHttpURLConnection

+0

不,這裏沒有代理,據我所知..我已經嘗試過這個簡單的案例,因爲你已經寫在這裏,它似乎也適用於我,奇怪..再次運行全面測試,看看是否問題仍然存在,但它需要很長時間才能看到結果..如果我仍然遇到異常情況,我將使用堆棧跟蹤更新帖子.. – posdef 2010-09-02 14:17:02

8

截至www.uniprot.org一個開發人員,我有能夠在請求日誌看優勢的實例。在去年根據日誌,我們沒有發送505迴應代碼。在任何情況下,我們的服務器都會理解http 1請求以及默認的http1.1(儘管您可能沒有得到您期望的結果)。

這讓我懷疑有沒有某種數據損壞的方式。或者你受硬件故障影響(最近我們遇到了交換機和整個數據中心的問題)。無論如何,如果您對uniprot.org有任何疑問或問題,請聯繫[email protected],然後我們可以看看我們是否可以幫助解決問題。

你的代碼片段看起來很正常,應該工作。

問候, Jerven Bolleman

+0

嗨Jerven, 非常感謝您的回覆,儘管它增加了我的困惑(事實上,你從來沒有發送505),這是值得讚賞的,你花時間去瀏覽日誌,並試圖找出可能的原因。 但是我幾天前發郵件給服務檯,當時我剛開始遇到問題,仍然沒有得到答覆。我認爲你可能需要關注很多問題,所以我只是想確定在我的結局中是否有任何事情可以做。 :) – posdef 2010-09-03 09:21:56

3

從用於URL類的API文檔:

URL類本身不進行編碼或解碼的任何URL部件 [... ]。調用者有責任編碼任何字段, 在調用URL之前需要轉義,也可以解碼從URL返回的任何 轉義字段。

所以如果你有它調用新的網址(URL-STR)

2

@posdef我有同樣的HTTP錯誤代碼505的問題之前,您的網址-STR編碼任何空間。當我在Firefox中使用Java代碼使用的URL時,Chrome就能正常工作。但通過代碼給IOException。但最後我知道在url字符串中有括號'('和')',通過刪除它,它看起來像我需要URLEncodeing一樣的瀏覽器。

+0

我需要URLEncodeing和瀏覽器一樣(我面臨同樣的問題) – 2013-05-17 10:48:21

相關問題