2010-11-23 12 views
1

Ich hole eine Webseite auf Android mit HTTPS (ignoriert das Zertifikat, da es sowohl selbstsigniert als auch veraltet ist, wie gesehen here - frag nicht, es ist nicht mein Server :)).Android bekommt HTTPS-Seite abgeschnitten

ich definiert habe meine

public class MyHttpClient extends DefaultHttpClient { 


    public MyHttpClient() { 
     super(); 
     final HttpParams params = getParams(); 
     HttpConnectionParams.setConnectionTimeout(params, 
       REGISTRATION_TIMEOUT); 
     HttpConnectionParams.setSoTimeout(params, REGISTRATION_TIMEOUT); 
     ConnManagerParams.setTimeout(params, REGISTRATION_TIMEOUT); 
    } 

    @Override 
    protected ClientConnectionManager createClientConnectionManager() { 
     SchemeRegistry registry = new SchemeRegistry(); 
     registry.register(new Scheme("http", PlainSocketFactory 
       .getSocketFactory(), 80)); 
     registry.register(new Scheme("https", new UnsecureSSLSocketFactory(), 443)); 
     return new SingleClientConnManager(getParams(), registry); 
    } 
} 

wo die UnsecureSSLSocketFactory auf dem Vorschlag der vorgenannten topic gegeben erwähnt basiert.

Ich verwende diese Klasse dann

public class HTTPHelper { 

    private final static String TAG = "HTTPHelper"; 
    private final static String CHARSET = "ISO-8859-1"; 

    public static final String USER_AGENT = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)"; 
    public static final String ACCEPT_CHARSET = "ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
    public static final String ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 


    /** 
    * Sends an HTTP request 
    * @param url 
    * @param post 
    * @return 
    */ 
    public String sendRequest(String url, String post) throws ConnectionException { 

     MyHttpClient httpclient = new MyHttpClient(); 

     HttpGet httpget = new HttpGet(url); 
     httpget.addHeader("User-Agent", USER_AGENT); 
     httpget.addHeader("Accept", ACCEPT); 
     httpget.addHeader("Accept-Charset", ACCEPT_CHARSET); 

     HttpResponse response; 
     try { 
      response = httpclient.execute(httpget); 
     } catch (Exception e) { 
      throw new ConnectionException(e.getMessage()); 
     } 

     HttpEntity entity = response.getEntity(); 

     try { 
      pageSource = convertStreamToString(entity.getContent()); 
     } catch (Exception e) { 
      throw new ConnectionException(e.getMessage()); 
     } 
     finally { 
      if (entity != null) { 
       try { 
        entity.consumeContent(); 
       } catch (IOException e) { 
        throw new ConnectionException(e.getMessage()); 
       } 
      } 
     } 

     httpclient.getConnectionManager().shutdown(); 
     return pageSource; 

    } 

    /** 
    * Converts a stream to a string 
    * @param is 
    * @return 
    */ 
    private static String convertStreamToString(InputStream is) 
    { 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, CHARSET)); 
      StringBuilder stringBuilder = new StringBuilder(); 
      String line = null; 
      try { 
       while ((line = reader.readLine()) != null) { 
        stringBuilder.append(line + "\n"); 
       } 
      } catch (IOException e) { 
       Log.d(TAG, "Exception in convertStreamToString", e); 
      } finally { 
       try { 
        is.close(); 
       } catch (IOException e) {} 
      } 
      return stringBuilder.toString(); 
     } catch (Exception e) { 
      throw new Error("Unsupported charset"); 
     } 
    } 

} 

Die Seite, die ich nach etwa hundert Zeilen abgeschnitten bekommen, eine Seite fecth. Es wird an einem bestimmten Punkt abgeschnitten, an dem ein '_' (Unterstrich) Zeichen gefolgt von einem 'r' Zeichen folgt. Es ist nicht der erste Unterstrich auf der Seite.

Ich dachte, es könnte ein Codierungsproblem gewesen sein, also habe ich sowohl UTF-8 als auch ISO-8859-1 versucht, aber es ist immer noch abgeschnitten. Wenn ich die Seite mit Firefox öffne, wird die Codierung als ISO-8851-1 gemeldet.

Falls Sie sich fragen, ist die Webseite https://ricarichiamoci.dsu.pisa.it/ und es an der Linie 169,

function ChangeOffset(NewOffset) { 
    document.mainForm.last 

wo es eine Idee, stattdessen sollte die

function ChangeOffset(NewOffset) { 
    document.mainForm.last_record.value = NewOffset; 

Hat jemand abgeschnitten wird, warum Seite ist abgeschnitten?

Antwort

7

Ich fand heraus, dass die heruntergeladene Seite nicht abgeschnitten ist, aber die Funktion, die ich benutze, um es auszudrucken (Log.d) schneidet die Zeichenfolge ab.

So funktioniert die Methode zum Herunterladen der Seite Quellcode gut, aber Log.d() ist wahrscheinlich nicht so viel Text drucken soll.