2011-03-11 4 views
0

웹 페이지에서 일부 내용을 긁는 Java 프로그램을 작성했습니다. 그것은 매초 초 readWebPage 메서드를 호출하여 내용을 검색합니다. 내가 가지고있는 문제는 첫 번째 읽기 만 실제로 작동한다는 것입니다. 처음 웹 페이지를 읽은 후 InputStream은 항상 비어 있습니다 (in.ready() return false).HttpURLConnection에서 반복적으로 읽는 방법은 무엇입니까?

또한 conn.getContentLength()은 페이지의 내용이 변경 되었더라도 매번 같은 값을 반환합니다. 프로그램을 다시 시작하면 새 콘텐츠가 제대로 가져 오기됩니다.

내가 무엇을 놓쳤는가? conn 개체에서 새로 고침을 수행해야합니까?

private String readWebpage(HttpURLConnection conn) throws IOException{ 
      conn.connect(); 
      InputStreamReader in = new InputStreamReader((InputStream) conn.getContent()); 
      BufferedReader buffer = new BufferedReader(in); 
      StringBuilder b = new StringBuilder(conn.getContentLength()+5); 
      String line; 
      while ((line=buffer.readLine())!=null){ 
       b.append(line); 
      } 
      in.close(); 
      buffer.close(); 
      return b.toString(); 
    } 
+0

완료되면 Http Connection을 항상 닫으시겠습니까? –

+0

일단 끝나면'conn.disconnect() '를 호출 해 보았습니다.하지만 차이점을 보이지는 않았습니다. –

답변

4

매번 동일한 HttpURLConnection 개체를 전달하고 있습니까? 예인 경우 InputStream이 기본 HTTP 연결과 연결되어 있기 때문에 URL에 대한 새로운 스트림이 아닌 매번 InputStream이 표시됩니다. 이 메서드에 전달하기 전에 새 연결 (URL # openConnection)을 열면 좋을 것입니다.

+0

고마워요,이게 내 문제를 해결했습니다! –

0

전체 화면을 읽은 후에는 더 읽을만한 것이 있습니까? 단일 가져 오기 또는 게시 메시지로 인해 서버에서 여러 번 전송할 수 없습니다. 그것은 하나의 메시지를 다시 보내고, 이야기의 끝.

화면이 계속 업데이트되는 경우, (a) 입력이 완료되지 않았거나 (b) 추가 업데이트가 HTML이 아닌 다른 애플릿 또는 서버와 통신중인 Javascript 기능이거나 이러한.

입력이 계속되는 한 BufferedReader.readLine 블록이 있다고 생각하므로 (a) 생각할 수 없습니다. 상황이 (b)라면 더 많은 HTML을 읽는 것이 도움이되지 않을 것입니다. 변화가 없습니다.

관련 문제