HttpClient: Retry request once on empty result body.

This commit is contained in:
Andreas Schildbach 2019-01-09 01:06:55 +01:00
parent 7687f5424d
commit eb026a965f

View file

@ -133,6 +133,21 @@ public final class HttpClient {
} }
}; };
final Interceptor retryInterceptor = new Interceptor() {
@Override
public Response intercept(final Chain chain) throws IOException {
final Request request = chain.request();
final Response response = chain.proceed(request);
if (response.isSuccessful() && response.peekBody(1).bytes().length == 0) {
log.info("Got empty response, retrying {}", request.url());
response.close();
return chain.proceed(request);
} else {
return response;
}
}
};
final OkHttpClient.Builder builder = new OkHttpClient.Builder(); final OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.followRedirects(false); builder.followRedirects(false);
builder.followSslRedirects(true); builder.followSslRedirects(true);
@ -140,6 +155,7 @@ public final class HttpClient {
builder.writeTimeout(30, TimeUnit.SECONDS); builder.writeTimeout(30, TimeUnit.SECONDS);
builder.readTimeout(30, TimeUnit.SECONDS); builder.readTimeout(30, TimeUnit.SECONDS);
builder.addNetworkInterceptor(loggingInterceptor); builder.addNetworkInterceptor(loggingInterceptor);
builder.addInterceptor(retryInterceptor);
builder.addInterceptor(xmlEncodingInterceptor); builder.addInterceptor(xmlEncodingInterceptor);
OKHTTP_CLIENT = builder.build(); OKHTTP_CLIENT = builder.build();
} }