2010-11-23 4 views
1

Je vais chercher une page Web sur Android en utilisant HTTPS (en ignorant le certificat car il est à la fois auto-signé et obsolète, comme vu here - ne demandez pas, ce n'est pas mon serveur :)).Android obtient la page HTTPS tronquée

J'ai défini mon

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); 
    } 
} 

où le UnsecureSSLSocketFactory mentionné est basée sur la suggestion donnée sur le topic mentionné ci-dessus.

Je suis alors en utilisant cette classe pour fecth une page

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"); 
     } 
    } 

} 

La page que je reçois est tronquée au bout d'environ une centaine de lignes. Il est tronqué à un point précis, où un caractère '_' (trait de soulignement) est suivi d'un caractère 'r'. Ce n'est pas le premier trait de soulignement sur la page. Je pensais que cela pouvait être un problème de codage, alors j'ai essayé UTF-8 et ISO-8859-1, mais il est encore tronqué. Si j'ouvre la page avec Firefox, il signale que l'encodage est ISO-8851-1.

Si vous vous demandez, la page Web est https://ricarichiamoci.dsu.pisa.it/ et il est tronqué à la ligne 169,

function ChangeOffset(NewOffset) { 
    document.mainForm.last 

où il devrait plutôt être

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

Est-ce que quelqu'un a une idée des raisons pour lesquelles la la page est tronquée?

Répondre

7

J'ai compris que la page téléchargée n'est pas tronquée, mais la fonction que j'utilise pour l'imprimer (Log.d) tronque la chaîne.

Donc la méthode pour télécharger le code source de la page fonctionne bien, mais Log.d() n'est probablement pas destiné à imprimer autant de texte.

Questions connexes