Retrofit+OKHttp+RxJava POST重定向URL

最近使用Retrofit+OKHttp+RxJava联合框架开发项目,在开发项目时,遇到公共参数的封装和url重定向问题,个人比较懒,在网上找了部分博客,但还是不能解决问题,最后小伙人不错的博客解决了解决了问题。
根据okhttp的传统,所有的数据都可以通过拦截器去拦截,添加修改参数也一样:

class ParamInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        val oldRequest = chain.request()
        var postBodyString = bodyToString(oldRequest.body())//获取请求的参数

        var param = if (postBodyString.contains("&temp=")) postBodyString.split("temp=")[1] else ""//获取temp参数对应的值
        LogUtils.d("param:$param")
        var url = oldRequest.url().newBuilder()
        if (!TextUtils.isEmpty(param)) {
            var p = param.split("&")
            for (str in p) {
                var s = str.split("%3D")
                url.addQueryParameter(s[0], s[1]) //重新拼接url
            }
        }
        var newRequestBuild = oldRequest.newBuilder().url(url.build())//重定向url
        //重新组装POST参数
        var requestBody = RequestBody.create(
            MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"),
            postBodyString.split("&temp=")[0]
        )

        val newRequest = newRequestBuild.method(oldRequest.method(), requestBody).build()

        return chain.proceed(newRequest)
    }

    private fun bodyToString(request: RequestBody?): String {
        try {
            val buffer = Buffer()
            if (request != null)
                request.writeTo(buffer)
            else
                return ""
            return buffer.readUtf8()
        } catch (e: IOException) {
            return "did not work"
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值