2010-05-12 43 views
5

我想用ssl上传文件到一些URL。我用这个代码来设置信任管理器 -ssl on android奇怪的问题

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

,这一个来设置主机名验证 -

这样
public static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { 

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

话,我打开连接 -

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

后我得到我用它来上传数据的连接。我使用http一切正常,但是当我尝试https时,我收到以下异常 -

写入错误:系统调用期间发生I/O错误,管道破损 java.io.IOException:写入错误:I/O错误系统调用,损坏的管道 at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativewrite(Native Method) at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.access $ 600(OpenSSLSocketImpl.java:55 ) at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl $ SSLOutputStream.write(OpenSSLSocketImpl.java:565) at java.io.OutputStream.write(OutputStream.java:82) at org.apache.harmony .luni.internal.net.www.protocol.http.HttpURLConnection $ HttpOutputStream.write(HttpURLConnection.java:652) (DataOutputStream.java:101)

奇怪的是,我并不是总是得到异常。当我尝试上传小文件(200K)时,它正在运行O.K.或者它的崩溃非常罕见,但是当我尝试上传更大的(大于1MB)时,几乎每次都会收到异常。

任何想法?

+0

我还发现这里类似的问题http://groups.google.com/group/android-developers/browse_thread/thread/ea5790641481c8d8/38eea394ca62faa9?lnk=gst&q=Unable+to+upload+multipart+file+HttpURLConnection+Chunked +流媒体+模式+是+给+破碎+管道+异常#38eea394ca62faa9 – 2010-05-13 13:11:17

+0

我向Android演示项目报告问题,但仍然没有回应:( http://code.google.com/p/android/issues/detail ?ID = 8625 – 2010-05-30 07:13:52

回答