2010-03-16 21 views
14

¿Cómo puedo hacer varias solicitudes en una HttpURLConnection con Java?varias solicitudes de una 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 

Thanks.

Respuesta

15

Desde el Javadoc:

Cada instancia HttpURLConnection se utiliza para hacer una única petición.

El objeto aparentemente no está destinado a ser reutilizado.

Aparte de un poco de agitación e ineficiencia de la memoria, no hay un gran problema al abrir un HttpURLConnection por cada solicitud que desee realizar. Sin embargo, si desea una red de E/S eficiente a mayor escala, es mejor que utilice una biblioteca especializada como Apache HttpClient.

+2

Estaba a punto de decir lo mismo, sobre que no debe ser reutilizado –

+0

¡Tenga un +1, entonces! Por lo general, me angustio tanto por mis respuestas que todo el mundo me gana. :) –

+0

@CarlSmotricz puede ser cierto, ... pero en mi caso estoy recibiendo muchas solicitudes, demasiadas sin ningún parámetro get/post + 1 con el parámetro get, .... He usado código simple para httpconnection solamente. http://stackoverflow.com/questions/23017813/httpurlconnection-lots-of-requests – Bhuro

3

Más allá de la respuesta correcta, tal vez lo que realmente quiere es la reutilización de la conexión TCP subyacente, también conocida como "conexiones persistentes", que de hecho son compatibles con HttpURLConnection de JDK. Por lo tanto, no necesita usar otras librerías http por ese motivo; aunque hay otra razón legítima, posiblemente el rendimiento (pero no necesariamente, depende del caso de uso, la biblioteca).

+0

Gracias, pero ya lo hice con una biblioteca de terceros. –

+0

@StaxMan, lo siento, pero ¿puede dar algún ejemplo de implementación de "conexiones persistentes" con HttpURLConnection? Tal vez algún enlace o fragmento de código? – Ksenia

+1

@Ksenia no hay nada que hacer allí: se usa automáticamente. Es transparente; la nueva conexión TCP solo se abre si es necesario; uno existente se mantuvo abierto durante cierto tiempo (¿30 segundos? hay algún valor predeterminado de JDK), cerrado si está inactivo durante demasiado tiempo. Por lo tanto, su par de solicitud/respuesta LOGICAL http puede usar la misma conexión PHYSICAL TCP que una solicitud/respuesta HTTP anterior y completa. – StaxMan

Cuestiones relacionadas