Sono stato in grado di risolvere questo utilizzando Apache Commons HttpClient, vedere lo snippet di codice di seguito.
Come temevo, l'URLConnection fornito da java.net è un'implementazione molto semplicistica e proverà solo il primo indirizzo IP dall'elenco risolto. Se davvero non ti è permesso usare un'altra libreria, dovrai scrivere la tua gestione degli errori. È un po 'complicato, dato che dovrai risolvere tutti gli IP prima di usare la mano InetAddress e connetterti a ogni IP passando l'intestazione "Host: domain.name" allo stack HTTP fino a quando uno degli IP non risponde.
La libreria Apache è molto più robusta e consente una grande quantità di personalizzazione. È possibile controllare quante volte riproverà e, soprattutto, tenterà automaticamente tutti gli indirizzi IP risolti con lo stesso nome fino a quando uno di essi risponde correttamente.
HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException exception, int count, HttpContext context) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
return count < 30;
}
};
ConnectionKeepAliveStrategy keepAlive = new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
return 500;
}
};
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("http.socket.timeout", new Integer(2000));
httpclient.getParams().setParameter("http.connection.timeout", new Integer(2000));
httpclient.setHttpRequestRetryHandler(myRetryHandler);
httpclient.setKeepAliveStrategy(keepAlive);
HttpGet httpget = new HttpGet("http://remotehost.com");
HttpResponse httpres = httpclient.execute(httpget);
InputStream is = httpres.getEntity().getContent();
Spero che questo aiuti!
Se il parametro è un url anziché un ip, non è necessario preoccuparsene. – Jacob