我用Java写了一些简单的代码,该方法应该连接到网站并返回BufferedReader。
private BufferedReader getConnection(String url_a) {
URL url;
try {
System.out.println("getting connection");
url = new URL(url_a);
HttpURLConnection urlConnection = (HttpURLConnection)
url.openConnection();
urlConnection.addRequestProperty("User-Agent",
"Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924"
+ "Epiphany/1.4.4 (Ubuntu)");
inStream = new InputStreamReader(urlConnection.getInputStream());
return new BufferedReader(inStream);
} catch (Exception ex) {
Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
当我在我的 PC 上使用它时,它工作正常,但是当我将 .jar 文件放在服务器上时,我收到此错误:
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:718)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:715)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322)
at dataconverter.Reader.getConnection(Reader.java.260)
问题很奇怪,因为不是每次都抛出异常,有时一切正常,程序运行正常。
有人有什么想法吗?
原文由 Maciej Skrzypiński 发布,翻译遵循 CC BY-SA 4.0 许可协议
“文件意外结束”意味着远程服务器接受并关闭了连接而没有发送响应。远程系统可能太忙而无法处理请求,或者存在随机断开连接的网络错误。
服务器中也可能存在错误:请求中的某些内容导致内部错误,并且服务器只是关闭连接而不是像应有的那样发送 HTTP 错误响应。一些人认为这是由于请求中缺少标头或无效标头值引起的。
有了可用的信息,就不可能说出出了什么问题。如果您有权访问相关服务器,则可以使用数据包嗅探工具来查找发送和接收的确切内容,并查看服务器进程的日志以查看是否有任何错误消息。