From eb026a965fd429f0ddd2af4ef9684ea3aecd12ce Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Wed, 9 Jan 2019 01:06:55 +0100 Subject: [PATCH] HttpClient: Retry request once on empty result body. --- .../src/de/schildbach/pte/util/HttpClient.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/enabler/src/de/schildbach/pte/util/HttpClient.java b/enabler/src/de/schildbach/pte/util/HttpClient.java index c7662556..22c4331c 100644 --- a/enabler/src/de/schildbach/pte/util/HttpClient.java +++ b/enabler/src/de/schildbach/pte/util/HttpClient.java @@ -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(); builder.followRedirects(false); builder.followSslRedirects(true); @@ -140,6 +155,7 @@ public final class HttpClient { builder.writeTimeout(30, TimeUnit.SECONDS); builder.readTimeout(30, TimeUnit.SECONDS); builder.addNetworkInterceptor(loggingInterceptor); + builder.addInterceptor(retryInterceptor); builder.addInterceptor(xmlEncodingInterceptor); OKHTTP_CLIENT = builder.build(); }