web-dev-qa-db-ja.com

OkHttpはリクエストでgzip圧縮を有効/無効にします

Retrofitを使用してリクエストを管理しており、gzipを使用しているかどうかを確認するためにいくつかのテストを行いたいと考えています。

デフォルトでは、OkHttpはリクエストに対してgzip圧縮を実行しますか、それとも interceptor で実装する必要がありますか?

私は追加しました

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

または:

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

私のリクエストに応じて、リクエストの長さに変更は見られませんでした。

9
Favolas

このヘッダーで機能を無効にしない限り、OkHttpは応答本文で透過的なgzipを実行します。

Accept-Encoding: identity
10
Jesse Wilson

このコードを使用できます

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();    
}
3
Ahmad Aghazadeh