Apache Commons HttpClientを使用して解決できました。下記のコードをご覧ください。
私が恐れていたように、java.netによって提供されるURLConnectionは非常に単純な実装であり、解決されたリストから最初のIPアドレスだけを試します。実際に別のライブラリを使用することが許されていない場合は、独自のエラー処理を作成する必要があります。 InetAddressを使用する前にすべてのIPを解決し、 "Host:domain.name"ヘッダーを渡して各IPに接続し、IPの1つが応答するまで自分自身でHTTPスタックに接続する必要があります。
Apacheライブラリは非常に堅牢で、多くのカスタマイズが可能です。再試行回数を制御できます。最も重要なことは、いずれかが正常に応答するまで同じ名前に解決されたすべてのIPアドレスが自動的に試行されることです。
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();
この情報が役立ちますようにお願いいたします。
パラメータがipではなくurlの場合、このことに注意する必要はありません。 – Jacob