2012-03-08 2 views
1

다음과 같은 방법으로 웹 페이지의 내용을 읽고 싶지만 그 중 60-70 % 만 얻습니다.웹 페이지의 내용 (버퍼)이 불완전합니다.

두 가지 방법으로 웹 페이지를 읽었습니다. 둘 다 동일한 결과를 보았습니다. 나는 또한 다른 URL을 시도했다. 오류나 시간 초과가 없습니다.

내가 뭘 잘못하고 있니?

 URL url = new URL(uri.toString()); 
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    try 
    { 
     InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     while ((line = br.readLine()) != null) 
     { 
      sb.append(line + "\n"); 
     } 
     br.close(); 

     this.content = sb.toString(); 
    }  
    finally 
    { 
     urlConnection.disconnect(); 
    } 

나는 C# 및 윈폼으로 시도했습니다

HttpGet get = new HttpGet(uri); 
    HttpClient defaultHttp = new DefaultHttpClient(httpParameters); 
    HttpResponse response = defaultHttp.execute(get); 

    StatusLine status = response.getStatusLine(); 
    if(status.getStatusCode() == HttpStatus.SC_OK) 
    { 
     HttpEntity entity = response.getEntity(); 
     InputStream stream = entity.getContent(); 
      String encoding = "utf-8";  

     //long length = entity.getContentLength(); 
     //if(entity.getContentEncoding() != null) 
     //{ 
     // encoding = entity.getContentEncoding().getValue(); 
     //} 
     //if(length > 0) 
     //{ 
      byte[] buffer = new byte[1024]; 
      long read = 0; 
      do 
      { 
       read = stream.read(buffer); 
       if(read > 0) 
       { 
        this.content += new String(buffer, encoding); 
       } 
      }while(read > 0); 

     //} 
    } 

@edit. 해당 웹 페이지의 전체 HTML 소스를 읽었습니다. java-android를 사용하면 작동하지 않습니다.

+0

첫눈에 아무 것도 보이지 않습니다. URL을 게시 할 수 있습니까? –

+0

나는 많은 URL을 시도했지만 매번 같은 결과를 보았습니다. webseite의 출처가 아주 작지 않은 경우 완전한 소스를 얻지 못합니다. – Gepro

+0

좋아요, 그래서 당신을 위해 작동하지 않는 URL을 게시 할 수 있습니까? –

답변

0

아파치의 util jar 파일에있는 httpurlconnection이 응답의 가장 큰 바이트를 제한했기 때문에 그 번호를 기억할 수 없습니다.

하지만 대부분의 경우 UI 스레드에서 http conncetion을 사용할 수 있으므로 때로는 안전하지 않으며 죽을 수도 있습니다. 스레드에서 HTTP 요청을 처리하도록 선택할 수 있지만 UI 스레드는 처리 할 수 ​​없습니다. 그래서 당신이 유타 스레드에서 그것을하는지 알고 싶습니다

+0

UI 스레드와 다른 "새로운"스레드에서 시도했습니다. 매번 같은 결과를 얻었습니다. 나는 완전한 소스를 얻지 못했습니다 ... – Gepro

+0

바이트를 읽는 데 잘못된 방법을 사용하면 바이트를 읽는 방법이 하나뿐 아니라 다른 방법을 시도해 볼 수도 있습니다. 성공할 수 있기를 바랍니다. – paramiao

0

나는 현재 같은 문제가 있습니다. 간단한 Java 응용 프로그램에서 코드를 시험했는데 전체 내용을 받았습니다. 그러나 Android에서는 콘텐츠가 불완전합니다. 이 질문은 이제 1 살입니다. 그 동안 그걸 해결 한 것 같아요. 솔루션을 추가 할 수 있습니까?

: 내 안드로이드 장치의 파일에 내용을 썼습니다. 내용이 완료되었습니다! logcat에서 Devie로부터받은 전체 출력을 표시하지 않는 것 같습니다.