package com.awsmithson.tcx2nikeplus.http;
import com.google.common.base.Predicate;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class HttpClients {
private static final @Nonnull RequestConfig REQUEST_CONFIG_DEFAULT = RequestConfig.custom()
.setConnectTimeout(5_000)
.setConnectionRequestTimeout(5_000)
.setSocketTimeout(8_000)
.build();
// The "URL_DATA_SYNC" nike+ service seems to intermittently return 503, HttpComponents can deal with that nicely.
private static final @Nonnull HttpStatusCodeRetryStrategy DEFAULT_RETRY_STRATEGY = new HttpStatusCodeRetryStrategy(10, 2000, new Predicate<HttpResponse>() {
@Override
public boolean apply(@Nullable HttpResponse httpResponse) {
return (httpResponse == null) || (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE);
}
});
public static HttpClientBuilder createDefaultHttpClientBuilder() {
return HttpClientBuilder
.create()
.setDefaultRequestConfig(REQUEST_CONFIG_DEFAULT)
.setRetryHandler(new HttpTimeoutRetryHandler(10))
.setServiceUnavailableRetryStrategy(DEFAULT_RETRY_STRATEGY);
}
}