Udało mi się rozwiązać ten problem, używając Apache Commons HttpClient, zobacz poniższy fragment kodu.
Obawiam się, że URLConnection zapewniony przez java.net jest bardzo prostą implementacją i wypróbuje tylko pierwszy adres IP z rozwiązanej listy. Jeśli naprawdę nie wolno ci korzystać z innej biblioteki, będziesz musiał napisać własną obsługę błędów. Jest to trochę kłopotliwe, ponieważ będziesz musiał rozwiązać wszystkie adresy IP przed użyciem strony InetAdress i połączyć się z każdym adresem IP przekazującym nagłówek "Host: domain.name" do stosu HTTP siebie, dopóki jedno z adresów IP nie odpowie.
Biblioteka Apache jest znacznie bardziej niezawodna i pozwala na wiele dostosowań. Możesz kontrolować ile razy spróbujesz i, co najważniejsze, automatycznie wypróbuje wszystkie adresy IP rozwiązane pod tą samą nazwą, aż jedna z nich odpowie poprawnie.
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();
Mam nadzieję, że to pomoże!
Jeśli parametr jest adresem URL zamiast adresu IP, nie musisz się tym przejmować. – Jacob