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ónpublic 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?
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 –
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 –