2012-01-24 2 views
7

Come inviare asincrona HTTP GET/POST richiesta in java senza attendere/lettura di risposta? Non voglio di utilizzare tutte le librerie di terze parti ..asincrono richiesta HTTP in java

risposta

4

Se non siete interessati a leggere la risposta affatto si può semplicemente utilizzare URL.openStream() per creare una connessione e quindi chiudere immediatamente il socket (o ignorarlo e lasciarlo scadere, se vuoi essere cattivo con il server). Questo non è strettamente asincrono, ma sarà un po 'più veloce di qualsiasi approccio che si basa sul recupero e l'analisi della risposta del server.

Questo può naturalmente essere effettuato asincrona scarico dei openStream() chiamate a un altro filo, manualmente o in base alle utilità disponibili in java.util.concurrent.

+0

URL.openConnection() non invia la richiesta HTTP al server.questo è il codice ** URL url = new URL ("http: // localhost /"); URLConnection myURLConnection = url.openConnection(); myURLConnection.connect(); ** e ho visto i log di accesso di Apache e non sta ottenendo la richiesta. – pavan

+2

@pavan - Ah, il mio errore, l'API da usare è in realtà 'openStream()', non 'openConnection()'. 'openConnection()' prepara un oggetto di connessione, ma in realtà non stabilisce una connessione al server. 'openStream()' stabilisce la connessione e restituisce 'InputStream' associato ad esso, che quindi sei libero di leggere, chiudere o ignorare. Modificherò la mia risposta di conseguenza. – aroth

0

Suggerirei di utilizzare qualcosa come Jetty HttpClient se non vi dispiace aggiungere le librerie Jetty alla vostra app. Ecco un buon esempio dalla pagina wiki di Jetty http://wiki.eclipse.org/Jetty/Tutorial/HttpClient.

+0

dalla documentazione al link sopra: "il metodo send() ritorna immediatamente dopo aver inviato lo scambio a un pool di thread per l'esecuzione" - quindi, non proprio asincrono. – kellogs