2010-05-12 21 views
5

Estoy tratando de cargar un archivo a alguna url usando ssl. Yo uso este código para establecer gestor de confianza -ssl en Android problema extraño

public static void trustAll() { 
    TrustManage[] trustEverythingTrustManager = new TrustManager[] { 
     new X509TrustManager() { 

      public void checkClientTrusted(X509Certificate[] chain, 
      String authType) throws CertificateException { 
      // TODO Auto-generated method stub 
      } 

      public void checkServerTrusted(X509Certificate[] chain, 
      String authType) throws CertificateException { 
      // TODO Auto-generated method stub 

      } 

      public X509Certificate[] getAcceptedIssuers() { 
      // TODO Auto-generated method stub 
      return null; 
      } 

     } 
    }; 

    SSLContext sc; 
    try { 
     sc = SSLContext.getInstance("TLS"); 
     sc.init(null, trustEverythingTrustManager, new SecureRandom()); 
     HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 
    } catch (Exception e) { 
    } 
} 

y éste para establecer el nombre de host verificador -

conexión
public static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { 

    public boolean verify(String hostname, SSLSession session) { 
     return true; 
    } 
}; 

entonces yo estoy abriendo así -

URL url = new URL("some_url"); 
HttpURLConnection connection = null; 
// check if this is https or just http 
if (url.getProtocol().toLowerCase().equals("https")) { 
    trustAll(); 
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection(); 
    https.setHostnameVerifier(DO_NOT_VERIFY); 
    connection = https; 
} else { 
    connection = (HttpURLConnection) url.openConnection(); 
} 

después de que consiga la conexión que uso para subir los datos. ¿Utilizo http? Todo está bien pero cuando intento https obtengo la siguiente excepción:

Error de escritura: error de E/S durante la llamada al sistema, tubería rota java.io.IOException: Error de escritura: error de E/S durante llamada al sistema, tubería rota en org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativewrite (método nativo) en org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access $ 600 (OpenSSLSocketImpl.java:55) en org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLOutputStream.write (OpenSSLSocketImpl.java:565) en java.io.OutputStream.write (OutputStream.java:82) en org.apache.harmony .luni.internal.net.www.protocol.http.HttpURLConnection $ HttpOutputStream.write (HttpURLConnection.java:652) en java.io.DataOutputStream.write (DataOutputStream.java:101)

Lo extraño es que no recibo excepciones todo el tiempo. Cuando intento cargar archivos pequeños (200K) está funcionando O.K. o se cuelga muy raramente, pero cuando intento subir los más grandes (más de 1MB) obtengo la excepción casi siempre.

¿Alguna idea?

+0

También encontré un problema similar aquí http://groups.google.com/group/android-developers/browse_thread/thread/ea5790641481c8d8/38eea394ca62faa9?lnk=gst&q=Unable+to+upload+multipart+file+HttpURLConnection+Chunked + Streaming + Mode + es + giving + broken + pipe + exception. # 38eea394ca62faa9 –

+0

informé sobre el problema a android con el proyecto de demostración, pero todavía no hay respuesta :( http://code.google.com/p/android/issues/detail ? id = 8625 –

Respuesta

Cuestiones relacionadas