我想用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)时,几乎每次都会收到异常。
任何想法?
我还发现这里类似的问题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
我向Android演示项目报告问题,但仍然没有回应:( http://code.google.com/p/android/issues/detail ?ID = 8625 – 2010-05-30 07:13:52