Bunu çözdüm. Buradaki fikir, henüz açılmamış yanıtı alacak özel bir durdurucu eklemektir ve bunu 'el ile' açmaktır - OkHttp'nin İçerik Kodlama üstbilgisine dayanarak otomatik olarak yapacağı aynı şeyi, ancak bu üstbilgiye gerek duymadan yapın.
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(new UnzippingInterceptor());
OkHttpClient client = clientBuilder.build();
Ve keseni dis gibidir:
dis gibidir dis gibi
private class UnzippingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
return unzip(response);
}
}
Ve unzip fonksiyonu geçerli:
// 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();
}
İlginç. Bir engelleyici kullanın. İyi bir fikir. İşe yaramalı gibi geliyor. – itsymbal
@itsymbal bunu yapar, kullanıyorum –