java.io.IOException:服务器返回HTTP响应代码505


问题内容

我的代码中包含基于HTML的查询,并且IOExceptions从服务器收到505响应后,似乎会引起一种特定的查询。我与其他似乎也有类似问题的人一起查看了505响应。显然505代表HTTP版本不匹配,但是当我将相同的查询URL复制到任何浏览器(尝试过firefox,seamonkey和Opera)时,似乎没有问题。我读过的一篇文章建议浏览器可能会自动处理版本不匹配的问题。

我试图通过使用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


问题答案:

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