Повторное использование HttpsUrlConnection ... не хочу каждый раз получать новое соединение. Как использовать повторно? - PullRequest
1 голос
/ 28 октября 2010

Я хочу вызвать защищенный веб-сервис, используя имеющийся у меня сертификат ... серверу требуется много времени для аутентификации с помощью сертификата, и, хотя это нормально в первый раз, пользователь будет вызывать его снова и снова снова (в том же сеансе), и я чувствую, что должен иметь возможность повторно использовать соединение.

У меня есть следующий код.

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). Я попытался немного передвинуться, чтобы выполнить только некоторые команды в первый раз, но все равно не получается.
Я читал о keep-alive, но не нашел хороших примеров того, что это такое и как его использовать (если это даже допустимый способ). Если я сделаю все это через HTML, через Firefox или IE, браузер сможет кешировать сертификат, я думаю, поэтому каждый раз после первого происходит быстро. Могу ли я подражать что-то, как?

Ответы [ 2 ]

1 голос
/ 28 октября 2010

лучшей альтернативой является использование HttpClient и его механизма пула соединений.также посмотрите, поможет ли вам поддержка https

0 голосов
/ 28 октября 2010

Попробуйте просто не звонить connection.disconnect() ... Я не думаю, что вам нужно что-то делать. Однако вы должны убедиться, что закрыли свой reader, когда закончили с ним.

...