HttpURLConnection persistente in Java

Sto cercando di scrivere un programma java che scaricherà e chiamerà automaticamente alcuni dei miei fumetti preferiti. Dal momento che richiederò più oggetti dallo stesso dominio, volevo avere una connessione http persistente che potessi tenere aperta fino a quando tutti i fumetti non saranno stati scaricati. Di seguito è il mio lavoro in corso. Come faccio a fare un’altra richiesta dallo stesso dominio ma percorso diverso senza aprire una nuova connessione http?

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class ComicDownloader { public static void main(String[] args) { URL url = null; HttpURLConnection httpc = null; BufferedReader input = null; try { url = new URL("http://www.cad-comic.com/cad/archive/2002"); httpc = (HttpURLConnection) url.openConnection(); input = new BufferedReader(new InputStreamReader(httpc.getInputStream())); String inputLine; while ((inputLine = input.readLine()) != null) { System.out.println(inputLine); } input.close(); httpc.disconnect(); } catch (IOException ex) { System.out.println(ex); } } } 

Secondo la documentazione qui , la persistenza HTTP viene gestita in modo trasparente in Java, sebbene fornisca le opzioni per controllarlo anche tramite le proprietà del sistema http.keepAlive e http.maxConnections .

Però,

L’attuale implementazione non bufferizza il corpo della risposta. Ciò significa che l’applicazione deve terminare la lettura del corpo della risposta o chiamare close () per abbandonare il resto del corpo della risposta, in modo che la connessione possa essere riutilizzata. Inoltre, l’implementazione corrente non tenterà di leggere i blocchi durante la pulizia della connessione, ovvero se l’intero corpo della risposta non è disponibile, la connessione non verrà riutilizzata.

Dai un’occhiata al link e vedi se ti aiuta davvero.

Per impostazione predefinita, HttpURLConnection è abbastanza intelligente da riutilizzare una connessione allo stesso host se keep-alive è abilitato dall’host.

Tuttavia, la gestione degli errori è debole e potresti trovarti in una situazione in cui client e host non sono sincronizzati e la connessione si blocca. Pertanto, disabilitiamo sempre keep-alive.

Secondo questo link http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html , il riutilizzo della connessione HTTP è abilitato di default, puoi usare Wireshark per controllare le interazioni tra i tuoi client e server. La prima richiesta contiene handshake TCP e SSL (se la tua richiesta è https), le richieste successive triggerste nel tempo keep-alive, non contiene alcun handshake TCP e SSL, ma solo trasferimenti di dati dell’applicazione.