Okhttp3添加公共请求头和添加公共请求参数

本文最新文章请移步:https://www.jianshu.com/p/8cc3de6674d3

在利用okhttp进行网络请求时,通常会用到拦截器Interceptor这个东西。但是为请求链接添加拦截器又分为三种添加,第一种:添加请求头,第二种:GET请求添加公共参数,第三种:POST请求添加公共参数。一下就是添加的方法

首先创建一个类实现Interceptor:public class HttpInterceptorimplements Interceptor{}

然后就是各个添加的方法:

最后在OkhttpClient中添加拦截器:

添加请求头方法:

/*//新请求(为什么说新操作是从旧请求里面提取内容信息)

Request.Builder requestBuilder=oldRequest.newBuilder();

requestBuilder.method(oldRequest.method(),oldRequest.body());

//将公共参数添加到请求头header中去

if (mHeaderParamsMap.size()>0){//如果添加了请求头公共参数,Map.size>0

//遍历集合,将参数添加到请求头header中

for (Map.Entry params:mHeaderParamsMap.entrySet()){

requestBuilder.header(params.getKey(),params.getValue());

}

}

//将公共参数添加到请求头后,建立新请求连接

Request newRequest=requestBuilder.build();*/


GET请求添加公共参数方法:

//获取并判断网络请求的方法

String method=oldRequest.method();

if (method.equals("GET")&&mUrlParamsMap.size()>0){//判断,并且判断是否有添加公共参数请求

//添加公共参数,构建一个新的httpurl请求链接

    HttpUrl modifieUrl=null;//注意:就算下面没有添加公共参数成功,也会执行下去的

//遍历map集合,将公共参数添加到url中

    for (Map.Entry params:mUrlParamsMap.entrySet()){

modifieUrl=oldRequest.url().newBuilder()

.addQueryParameter(params.getKey(),params.getValue())

.build();

    }

//初始化新的request请求链接

    newRequest=oldRequest.newBuilder().url(modifieUrl).build();

    //再次发起网络请求,并获得返回的结果

    Response response=chain.proceed(newRequest);

    String content=response.body().string();//拿到返回结果的内容,进行分析

//获得返回结果的类型

    MediaType contentType=response.body().contentType();

    //生成新的response返回。注意:如果网络请求的response,如果去除后直接返回,将会抛异常

//注意:response只去一次值,取完后立即清空销毁,所以最好别在这打印日志

    return response.newBuilder()

.body(ResponseBody.create(contentType,content))

.build();

}

POST请求添加公共参数方法:

if (method.equals("POST")){

if (oldRequest.body()instanceof FormBody){

FormBody.Builder bodyBuilder=new FormBody.Builder();

        FormBody formBody= (FormBody) oldRequest.body();

        for (Map.Entry params:mUrlParamsMap.entrySet()){

formBody=bodyBuilder//POST请求方法添加公共参数

                    .add(params.getKey(),params.getValue())

.build();

        }

newRequest=oldRequest.newBuilder().post(formBody).build();

        Response response=chain.proceed(newRequest);

        String content=response.body().string();

        MediaType contentType=response.body().contentType();

        return response.newBuilder()

.body(ResponseBody.create(contentType,content))

.build();

    }

}


最后这里把整个代码贴上来:

package com.example.liyun.joy.serviceutils;

import java.io.IOException;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

import okhttp3.FormBody;

import okhttp3.HttpUrl;

import okhttp3.Interceptor;

import okhttp3.MediaType;

import okhttp3.Request;

import okhttp3.Response;

import okhttp3.ResponseBody;

/**

* 公共拦截器

* 向请求连接添加公共参数和请求头

*/

public class HttpInterceptorimplements Interceptor {

//创建map集合,将添加的公共参数保存到map中

    private MapmUrlParamsMap=new HashMap<>();

    /*//创建map集合,保存添加到请求头的公共参数,添加公共请求头也一样

private Map mHeaderParamsMap=new HashMap<>();*/

    @Override

    public Responseintercept(Chain chain)throws IOException {

//获得请求连接

        Request oldRequest=chain.request();//旧连接

        Request newRequest;//添加公共参数后的新连接

        /**

* 这个时添加请求头的

*/

        /*//新请求(为什么说新操作是从旧请求里面提取内容信息)

Request.Builder requestBuilder=oldRequest.newBuilder();

requestBuilder.method(oldRequest.method(),oldRequest.body());

//将公共参数添加到请求头header中去

if (mHeaderParamsMap.size()>0){//如果添加了请求头公共参数,Map.size>0

//遍历集合,将参数添加到请求头header中

for (Map.Entry params:mHeaderParamsMap.entrySet()){

requestBuilder.header(params.getKey(),params.getValue());

}

}

//将公共参数添加到请求头后,建立新请求连接

Request newRequest=requestBuilder.build();*/

//获取并判断网络请求的方法

        String method=oldRequest.method();

        if (method.equals("GET")&&mUrlParamsMap.size()>0){//判断,并且判断是否有添加公共参数请求

//添加公共参数,构建一个新的httpurl请求链接

            HttpUrl modifieUrl=null;//注意:就算下面没有添加公共参数成功,也会执行下去的

//遍历map集合,将公共参数添加到url中

            for (Map.Entry params:mUrlParamsMap.entrySet()){

modifieUrl=oldRequest.url().newBuilder()

.addQueryParameter(params.getKey(),params.getValue())

.build();

            }

//初始化新的request请求链接

            newRequest=oldRequest.newBuilder().url(modifieUrl).build();

            //再次发起网络请求,并获得返回的结果

            Response response=chain.proceed(newRequest);

            String content=response.body().string();//拿到返回结果的内容,进行分析

//获得返回结果的类型

            MediaType contentType=response.body().contentType();

            //生成新的response返回。注意:如果网络请求的response,如果去除后直接返回,将会抛异常

//注意:response只去一次值,取完后立即清空销毁,所以最好别在这打印日志

            return response.newBuilder()

.body(ResponseBody.create(contentType,content))

.build();

        }else if (method.equals("POST")){

if (oldRequest.body()instanceof FormBody){

FormBody.Builder bodyBuilder=new FormBody.Builder();

                FormBody formBody= (FormBody) oldRequest.body();

                for (Map.Entry params:mUrlParamsMap.entrySet()){

formBody=bodyBuilder//POST请求方法添加公共参数

                            .add(params.getKey(),params.getValue())

.build();

                }

newRequest=oldRequest.newBuilder().post(formBody).build();

                Response response=chain.proceed(newRequest);

                String content=response.body().string();

                MediaType contentType=response.body().contentType();

                return response.newBuilder()

.body(ResponseBody.create(contentType,content))

.build();

            }

}

return chain.proceed(oldRequest);

    }

/**

*创建一个静态类,用于添加公共参数到map集合缓存

*/

    public static class Builder{

//创建拦截器对象,得到Map存储添加进来的公共参数

        HttpInterceptormHttpInterceptor;

        public Builder(){//构造方法中初始话拦截器

            mHttpInterceptor=new HttpInterceptor();

        }

/**

* 将公共参数添加到map集合

        * @param key

        * @param value

        * @return

        */

        public BuilderaddUrlParams(String key,String value){

mHttpInterceptor.mUrlParamsMap.put(key,value);

return this;

        }

public BuilderaddUrlParams(String key,double value){

return addUrlParams(key,String.valueOf(value));

        }

public BuilderaddUrlParams(String key,int value){

return addUrlParams(key,String.valueOf(value));

        }

public BuilderaddUrlParams(String key,long value){

return addUrlParams(key,String.valueOf(value));

        }

public BuilderaddUrlParams(String key,float value){

return addUrlParams(key,String.valueOf(value));

        }

/**

* 返回建立拦截器

        * @return

        */

        public HttpInterceptorbuild(){

return mHttpInterceptor;

        }

}

}


小小的尝试,希望对各位有用,如果又哪里需要改正的地方,请多多指教!谢谢

参考链接:https://blog.csdn.net/qq_38450133/article/details/81218114

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339