我正在尝试使用SSL将文件上载到某个URL。我使用此代码设置信任管理器-
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.i o.ioexception:写入错误:系统调用期间发生I/O错误,管道断开
在org.apache.harmony.xnet.provider.jsse.opensslsocketimpl.nativewrite(本机方法)上
在Org.Apache .NET.xNET.Posial.jSS.OpenSSLoCKTIMP.Access 600美元(OpenSSLoCKIDEPPL.java:55)
在Org.Apache .xNET.Posial.jsE.OpenSSLoCKTIMPL $ sSLututsField.Wrad(OpenSSLoCKIDEPPL.java:565)
在Java.Io.OuttStudio.Wrrad(OuttStudio.java:82)
在Org.Apache .Huni.NET.NET .www.协议. http.httpUpLink $httpOuttStudio.Wrrad(httpLooCorn.java:652)
在Java.IO .DATAOuttStudio.Wrrad(DATAOuttStudio.java:101)
奇怪的是,我一直没有例外。当我尝试上传小文件(200K)时,它工作正常,或者崩溃非常罕见,但是当我尝试上传大文件(超过1MB)时,我几乎每次都会收到异常。
有什么想法吗?