OkHttp中Interceptor拦截器之公共参数请求封装

本文介绍了如何使用OkHttp的Interceptor来实现公共参数如版本号、手机号等的自动添加到每个网络请求中,避免每次手动添加。首先讲解了Interceptor的作用,接着详细阐述了需求约束和解决方法,包括创建自定义拦截器并复写intercept方法,最后展示了拦截器生效后的请求URL变化,证明了其功能的实现。
摘要由CSDN通过智能技术生成

前言

之前在面试的时候遇到这样的一个问题,那就是如果app中所有的请求都要加入一些参数(例如 版本号、手机号、登录用户名、token等。。。)那么怎么做才能实现,而不至于在每次请求的时候都去进行添加这些请求头。其实这个问题,刚开始我是拒绝的(之前没有遇到过这样的需求)。当时只是想着可以使用okhttp体用的拦截器Interceptor来进行实现,但是具体的实现还是来到了今天。

Interceptor说明

在okhttp-wiki里面专门有一篇介绍Interceptor的(点击我跳转到Interceptor链接)里面有这样的一句话

Interceptors are a powerful mechanism that can monitor, rewrite, and retry calls.
拦截器是一种强大的机制,可以监视、重写和重试调用

Interceptor几大作用
  • Application Interceptors 应用拦截器
  • Network Interceptors 网络拦截器
  • Choosing between application and network interceptors 在应用和网络拦截器之间做选择
  • Rewriting Requests 重写请求
  • Rewriting Responses 重写响应

具体的作用简介这里不再赘述,这里推荐一篇翻译的文章(Okhttp-wiki 之 Interceptors 拦截器

进入主题

先来看下我们的需求

需求约束
  • 1、API Base Url : http://111.111.111.11:8082/xxxxx/xx(类似)
  • 2、客户端请求API的数据格式为json形式:

    {
        "publicParams":{},
        "key1":value,
        "key2":value
    }

    其中publicParams为公共参数,每个API接口必须传递

  • 3、公共参数

    字段 类型 说明
    imei string 移动设备身份(非必须)
    model 手机型号、设备名称
    la string 系统语言
    resolution string 分辨率(格式:1920*1080)
    densityScaleFactor string 密度比例
    sdk int SDK版本号
    os string 系统源代码控制值

解决方法

我们就是利用Interceptor拦截器,对每次的网络请求进行拦截,然后拿到请求url,并对url进行改造来加入我们需要的公共参数,进行和请求参数的拼接,然后构造request,通过chain.proceed(request)进行改造。

第一步
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值