Android 日常开发(47)okhttp 服务器端使用Gzip问题解决

本文讲述了在Android开发中,使用OkHttp时遇到Gzip问题的排查过程及解决方案。当contentLength显示为-1时,作者发现可能是由于nginx的gzip压缩与OkHttp的交互导致。解决思路是通过手动添加拦截器处理Gzip解压缩,同时讨论了OkHttp为何移除Content-length头部。
摘要由CSDN通过智能技术生成

前言

上一篇文章我们讲到Gzip的问题,我们也找到了问题的原因。我没通过重定义response来获取contentLength。这一篇我们具体讲以下Gzip问题的由来和解决的思想。
在这里插入图片描述
排查这个问题的时候很慌,之前没有遇到过,第一次遇到,所以就。。

恢复当时debug的心请,一切准备就绪

我把pdf上传到七牛云之后,试过。loading框跑的好好的。但是一换上公司的文档地址,就各种奇葩事故,大型翻车现场
在这里插入图片描述
调试结果显示contentLength=-1。一脸懵逼的我,果断上网搜索。搜索引擎编程。收了白天也没有找到类似的问题。那么我只能根据搜索的一点名词来看了。

1.nginx gzip开启文件压缩
2.okhttp默认支持gzip,如果开发者主动声明gzip,那么解压缩动作将由开发者自己完成

看到这些内容,我算是有一点眉目了

我跟着网上的提示,找到了BridgeInterceptor这个拦截器。(okhttp3.8.1版本)

public final class BridgeInterceptor implements Interceptor {
   
  private final CookieJar cookieJar;

  public BridgeInterceptor(CookieJar cookieJar) {
   
    this.cookieJar = cookieJar;
  }

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

   //请求体
    RequestBody body = userRequest.body();
    if (body != null) {
   
      MediaType contentType = body.contentType();
      if (contentType != null) {
   
        requestBuilder.header("Content-Type", contentType.toString());
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值