OkHttp,使用自定义拦截器时是否禁用了自动 GZIP?

OkHttp, is the automatic GZIP disabled when using a custom interceptor?

我在 Android 应用程序中使用 OkHttp 2.3.0。我的问题是关于透明 GZIP 功能。根据文档,它应该静静地在那里。但是我在请求中看不到 ("accept-encoding", "gzip") header 。

我正在使用自定义拦截器添加身份验证:

@Override
public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    // 1. sign this request

    [get token]

    if (!TextUtils.isEmpty(token)) {
        // we have a token. let's use it to sign the request
        request = request.newBuilder()
                .header(AUTH_HEADER_KEY, BEARER_HEADER_VALUE + token)
                .build();
    }

    // 2. proceed with the request
    Log.d("t", "Headers " + request.headers()); <--- no gzip header here
    Response response = chain.proceed(request);

日志语句只显示header我添加的:

Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxx

但与 GZIP 编码无关。我应该做其他事情,还是在我调用 chain.proceed(request) 之后添加 header?

chain.proceed()之后添加了header。您可以通过使用网络拦截器而不是应用程序拦截器来查看它;请参阅 OkHttp 拦截器文档以了解两者的比较。

我无法从应用程序本身记录任何 OkHttp 透明 header。有些人推荐使用 Charles 代理客户端,这可能是分析网络流量的好方法,尽管我发现进行正确配置很棘手,而且从版本 4 开始它不再是免费工具。 不过,出于我的目的,我发现使用 network profiler 非常有用,它内置于 Android Studio(在 Arctic Fox 2020.3.1 上测试)。

您可以从下面的示例中看到,Accept-Encoding header 在请求中可用,- 这个 header 是自动添加的,我没有在我的应用程序中添加它。