2
Apache-HttpComponents를 사용하여 페이지를로드하고 해당 HTML을 콘솔에 인쇄하는 Java 프로그램을 작성 중입니다. 그러나 프로그램은이 오류를 throw하기 전에 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