Ich fand es heraus. Die Idee besteht darin, einen benutzerdefinierten Interceptor hinzuzufügen, der die noch nicht entpackte Antwort übernimmt und sie manuell entzippt. Tun Sie das gleiche, was OkHttp automatisch basierend auf dem Content-Encoding-Header tun würde, ohne jedoch diesen Header zu benötigen.
ist wie dis:
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new UnzippingInterceptor());
OkHttpClient client = clientBuilder.build();
Und der Interceptor ist wie dis:
private class UnzippingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
return unzip(response);
}
}
Und die unzip Funktion ist wie dis:
// copied from okhttp3.internal.http.HttpEngine (because is private)
private Response unzip(final Response response) throws IOException {
if (response.body() == null) {
return response;
}
GzipSource responseBody = new GzipSource(response.body().source());
Headers strippedHeaders = response.headers().newBuilder()
.removeAll("Content-Encoding")
.removeAll("Content-Length")
.build();
return response.newBuilder()
.headers(strippedHeaders)
.body(new RealResponseBody(strippedHeaders, Okio.buffer(responseBody)))
.build();
}
Interessant. Benutze einen Abfangjäger. Gute Idee. Klingt so, als müsste es funktionieren. – itsymbal
@itsymbal es tut, ich benutze es –