2010-03-16 6 views
14

Как я могу выполнить несколько запросов в одном HttpURLConnection с Java?несколько запросов от одного HttpURLConnection

URL url = new URL("http://my.com"); 
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
HttpURLConnection.setFollowRedirects(true); 
connection.setDoOutput(true); 
connection.setRequestMethod("GET"); 

PrintStream ps = new PrintStream(connection.getOutputStream()); 
ps.print(params); 
ps.close(); 
connection.connect(); 
//TODO: do next request with other url, but in same connection 

Спасибо.

ответ

15

Из Javadoc:

Каждый экземпляр HttpURLConnection используется, чтобы сделать один запрос.

Объект, по-видимому, не предназначен для повторного использования.

Помимо небольшого перерыва памяти и неэффективности, нет большой проблемы с открытием одного HttpURLConnection для каждого запроса, который вы хотите сделать. Если вам нужна эффективная сетевая IO в более крупном масштабе, вам лучше использовать специализированную библиотеку, например Apache HttpClient.

+2

Я собирался сказать то же самое, о нем не предназначено для повторного использования –

+0

У вас есть +1! Обычно я так долго мучаюсь из-за своих ответов, что все меня бьют. :) –

+0

@CarlSmotricz может быть правдой, но в моем случае я получаю много запросов, слишком много без параметра get/post + 1 с параметром get .... Я использовал простой код для httpconnection. http://stackoverflow.com/questions/23017813/httpurlconnection-lots-of-requests – Bhuro

3

Помимо правильного ответа, возможно, что вы действительно хотите использовать повторное использование базового TCP-соединения, а также «постоянные соединения», которые действительно поддерживаются HttpURLConnection JDK. Поэтому вам не нужно использовать другие http-файлы по этой причине; хотя есть и другая законная причина, возможно, производительность (но не обязательно, зависит от варианта использования, библиотеки).

+0

Спасибо, но я уже сделал это с некоторой библиотекой третьей части. –

+0

@StaxMan, извините, но можете ли вы привести какой-нибудь пример реализации «постоянных соединений» с HttpURLConnection? Может быть, ссылки или фрагменты кода? – Ksenia

+1

@ Ksenia там нечего делать - он используется автоматически. Это прозрачно; новое TCP-соединение открывается только при необходимости; существующий был открыт в течение некоторого времени (30 секунд? есть некоторые JDK по умолчанию), закрытые, если простаивает слишком долго. Таким образом, ваша логическая пара запросов/ответа HTTP может использовать такое же PHYSICAL TCP-соединение, как и ранее выполненный HTTP-запрос/ответ. – StaxMan