Estoy usando Retrofit para administrar mis solicitudes y quiero hacer algunas pruebas para verificar el tamaño de la solicitud usando o no usando gzip.

De forma predeterminada, OkHttp realiza la compresión gzip de las solicitudes o debe implementarse con un interceptor?

He añadido

@Headers({
        "Accept-Encoding: gzip, deflate",
        "Content-Encoding: gzip"
})

O:

@Headers({
        "Content-Type: application/json;charset=utf-8",
        "Accept: application/json"
})

A mis solicitudes y no vi ningún cambio en la longitud de la solicitud.

10
Favolas 15 dic. 2016 a las 15:33

2 respuestas

La mejor respuesta

OkHttp hará gzip transparente en los cuerpos de respuesta a menos que desactive la función con este encabezado:

Accept-Encoding: identity
15
Jesse Wilson 15 dic. 2016 a las 13:41

Podemos usar este código

OkHttpClient client = new OkHttpClient();

Request request =  new Request.Builder().url(url)
                                                .addHeader("X-TOKEN", "Bearer " + Auth.getInstance(mContext).getToken())
                                                .addHeader("Accept-Encoding", "gzip")
                                                .build();

Response response = client.newCall(request).execute();

if (responseCode == 200) {
    // Regular JSON parsing to model
    ItemModel itemModel = LoganSquare.parse(response.body().byteStream(), ItemModel.class);
    long responseSize = response.body().contentLength();  

    // Manually decompress GZIP?
    ItemModel itemModel = LoganSquare.parse(new GZIPInputStream(response.body().byteStream()), ItemModel.class);
    long responseSize = response.body().contentLength();    
}
2
Ahmad Aghazadeh 22 abr. 2018 a las 05:12