22

我的代码中有基于 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

4

5 回答 5

45

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
于 2010-11-15T15:34:11.007 回答
8

作为 www.uniprot.org 的开发人员,我的优势是能够查看请求日志。根据日志,去年我们没有发送 505 响应代码。在任何情况下,我们的服务器都可以理解 http 1 请求以及默认的 http1.1(尽管您可能不会得到您期望的结果)。

这让我怀疑途中是否存在某种数据损坏。或者您受到硬件故障的影响(最近我们在交换机和整个数据中心遇到了一些问题;)。无论如何,如果您对 uniprot.org 有任何疑问或问题,请联系 help@uniprot.org,然后我们可以看看我们是否可以帮助/解决问题。

您的代码片段看起来很正常,应该可以工作。

问候,杰文·博勒曼

于 2010-09-03T06:57:38.753 回答
3

你在代理后面吗?此代码适用于我,并打印出我通过浏览器看到的相同文本。

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的一个实例

于 2010-09-02T10:03:55.880 回答
3

来自URL类的 API 文档:

URL 类本身并不编码或解码任何 URL 组件 [...]。调用者有责任对在调用 URL 之前需要转义的任何字段进行编码,并对从 URL 返回的任何转义字段进行解码。

因此,如果您的 url-str 中有任何空格,请在调用 new URL(url-str) 之前对其进行编码

于 2011-10-03T21:54:49.303 回答
2

@posdef 我遇到了相同的 HTTP 错误代码 505 问题。当我在 Firefox 中粘贴我在 Java 代码中使用的 URL 时,Chrome 可以正常工作。但是通过代码给出了IOException。但最后我知道在url字符串中有括号'('和')',通过删除它们它可以工作,所以看起来我需要像浏览器一样的URLEncodeing。

于 2013-01-11T07:21:33.923 回答