使用okHttp3拦截器统一加密解密(1)

layout: post

title: '如何使用okHttp拦截器统一解密(1)'

subtitle: '转载请注明出处'

date: 2019-08-30

categories: Android okHttp3

cover: 'http://bpic.588ku.com/back_pic/05/56/83/235b206f30d6d48.jpg'

tags: Android okHttp3


自定义拦截器可以先客户端一步拿到每一次 Http 请求的结果做一些额外处理

example:解密、token过期后重新请求等

public class ResponseInterceptor implements Interceptor {
    private static final String TAG = "ResponseInterceptor";

    @Override
    public Response intercept(Chain chain) throws IOException {
        //返回request
        Request request = chain.request();
        //返回response
        Response response = chain.proceed(request);
        //isSuccessful () ; 如果代码在[200..300]中,则返回true,这意味着请求已成功接收、理解和接受。
        if (response.isSuccessful()) {
            //返回ResponseBody
            ResponseBody responseBody = response.body();
            if (responseBody != null) {
                try {
                    //获取bodyString
                    BufferedSource source = responseBody.source();
                    source.request(Long.MAX_VALUE);
                    Buffer buffer = source.buffer();
                    Charset charset = Charset.forName("UTF-8");
                    MediaType contentType = responseBody.contentType();
                    if (contentType != null) {
                        charset = contentType.charset(charset);
                    }
                    String bodyString = buffer.clone().readString(charset);
                    //我这里是base64解码  具体情况自己定义
                    //base64解码
                    String responseData = new String(EncodeUtils.base64Decode(bodyString));
                    //生成新的ResponseBody
                    ResponseBody newResponseBody = ResponseBody.create(contentType, responseData.trim());
                    //response
                    response = response.newBuilder().body(newResponseBody).build();
                     Log.i(TAG, "解密后数据: " + responseData);

                } catch (IOException e) {
                    //如果发生异常直接返回
                    e.printStackTrace();
                    return response;
                }
            } else {
                Log.i(TAG, "onHttpResultResponse: 响应体为空");
            }
        }
        return response;
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • layout: post title: '使用okHttp3拦截器统一加密(2)' subtitle: '转载请注...
    galaxy_zheng阅读 5,841评论 0 1
  • 参考资源 官网 国内博客 GitHub官网 鉴于一些关于OKHttp3源码的解析文档过于碎片化,本文系统的,由浅入...
    风骨依存阅读 14,295评论 11 82
  • okhttp是基于网络的通信的一个开源框架,在了解之如果对网络7层模型,5层模型,4层模型TCP三次握手和四次挥手...
    凌烟醉卧阅读 13,827评论 1 19
  • 《追风筝的人》讲述了12岁的阿富汗富家少爷阿米尔与他父亲仆人儿子哈桑之间的友情故事,作者并没有很华丽的文笔,他仅仅...
    啊啦蕾阅读 2,900评论 0 2

友情链接更多精彩内容