重用HttpsURLConnection的......不希望每次都得到一个新的连接。如何再利用?
-
26-09-2019 - |
题
我要调用一个安全的Web服务,使用证书,我有...服务器需要很长的时间与证书进行身份验证,并且,而这是确定的第一时间,用户将它称为遍地再次(在相同的“会话”),我感觉我应该能够重用的连接。
我有以下代码。
System.setProperty("javax.net.ssl.trustStorePassword", "");
System.setProperty("javax.net.ssl.trustStore", "trusted.cacerts");
System.setProperty("javax.net.ssl.keyStorePassword", "mypassword");
System.setProperty("javax.net.ssl.keyStore", "trusted.clientcerts");
URL url = new URL("https://remoteserver:8443/testservice");
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml");
connection.setDoOutput(true);
OutputStream os = connection.getOutputStream();
os.write(bytes);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
connection.disconnect();
这个伟大的工程......但速度很慢。就在认证大约需要10秒。这种内部认证是典型这里不能加快。但我不能再使用它以某种方式?点击
我试图把循环解决此代码中,url.connection
和断开之间,以为我可能只是一次又一次的回忆,但失败(500)。我已经尝试了一下周围感动的事情,为了只是做一些第一次的命令,但它仍然失败。结果
我读到保持存活,但还没有找到的东西,这是任何很好的例子,以及如何使用它(如果是连的有效方法)。如果我通过HTML做到这一切,通过Firefox或IE浏览器,浏览器能够缓存证书,我猜,所以第一之后每次都是速度极快。我可以模仿一些如何?
解决方案
更好的替代方案是使用的HttpClient和其连接池机制。也看看HTTPS保持活动将帮助你。
其他提示
尝试只是不叫connection.disconnect()
...我不认为应该有任何需要你这样做。你应该,但是,请确保您关闭reader
当你与它完成。
不隶属于 StackOverflow