Я пишу программу Java, которая использует Apache-HttpComponents для загрузки страницы и печати ее HTML-кода на консоль; однако программа только печатает часть HTML, прежде чем бросать эту ошибку: Exception in thread "main" java.net.SocketException: socket closed.
Часть HTML, отображаемая перед исключением, точно такая же, как только я запускаю программу, и ошибка возникает в этом упрощенном примере с Google, Yahoo и Craigslist :Apache-HttpComponents: ошибка сокета закрыта
String USERAGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.craigslist.org");
get.setHeader(HTTP.USER_AGENT,USERAGENT);
HttpResponse page = client.execute(get);
get.releaseConnection();
InputStream stream = page.getEntity().getContent();
try{
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
String line = "";
while ((line = br.readLine()) != null){
System.out.println(line);
}
}
finally{
EntityUtils.consume(page.getEntity());
}
Ну, конечно, этого не должно быть. Освобождение соединения, а затем попытка чтения данных из него никогда не имело смысла. Слишком локализован. – EJP
В более раннем сценарии, который я написал, задержка в соединении, фактически закрывающаяся после того, как была вызвана releaseConnection(), была достаточно длинной, чтобы я мог прочитать весь (хотя и маленький) HTML-файл после его вызова. Это то, что обмануло меня в мысли, что сущности сохраняли свой контент локально. – Maythe