[英]server returns java.io.IOException: Server returned HTTP response code: 400 for URL
[英]java.io.IOException: Server returns HTTP response code 505
我在我的代码中有基于HTML的查询,一个特定的类似乎在从服务器收到505响应时引起IOExceptions
。 我和其他似乎有类似问题的人一起查看了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
: http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length
mnemonic%3aNUGM_HUMAN& http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length
tab&columns= 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
作为www.uniprot.org的开发人员,我的优势在于能够查看请求日志。 根据日志,去年我们没有发送505响应代码。 在任何情况下,我们的服务器都能理解http 1请求以及默认的http1.1(尽管您可能无法获得预期的结果)。
这让我怀疑在路上有某种数据损坏。 或者你受硬件故障的影响(最近我们在交换机和整个数据中心遇到了一些问题;)。 在任何情况下,如果您对uniprot.org有任何疑问或问题,请联系help@uniprot.org然后我们可以看看是否可以帮助/解决问题。
您的代码段似乎正常,应该可以正常工作。
此致,Jerven Bolleman
来自URL类的API文档:
URL类本身不编码或解码任何URL组件[...]。 调用者负责编码任何字段,这些字段需要在调用URL之前进行转义,并且还要解码从URL返回的任何转义字段。
所以,如果您的url-str中有任何空格,请在调用新URL(url-str)之前对其进行编码
@posdef我遇到了同样的HTTP错误代码505问题。 当我在Firefox中粘贴我在Java代码中使用的URL时,Chrome就可以了。 但是通过代码给出了IOException。 但最后我才知道在url字符串中有括号'('和')',通过删除它们起作用,所以看起来我需要URLEncodeing像浏览器一样。
你是代理人吗? 此代码适用于我,并打印出我通过浏览器看到的相同文本。
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));
conn
是HttpURLConnection的一个实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.