OkHttp拦截器添加头部参数

搭建环境

其实以前的一篇拦截器和这篇差不多 :详细步骤

拦截器代码:

	/**
 * date:2018/12/12
 * author:辉(家辉辉辉)
 * function:拦截器
 */
public class Util_interptor implements Interceptor {

    //初始化Map集合
    Map<String,String> mParentMap;

    public Util_interptor(Map<String, String> parentMap) {
        mParentMap = parentMap;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        //拿到request
        Request requestFu = chain.request();
        //用request获取网址
        String url = requestFu.url().toString();
        //判断集合是否非空
        if (mParentMap!=null && mParentMap.size()>0){
            Request.Builder builder = requestFu.newBuilder();
            for(String user: mParentMap.keySet()){
                //添加头部参数
                builder.addHeader(user,mParentMap.get(user));
            }

            Request build = builder.url(url).build();
            return chain.proceed(build);
        }
        return chain.proceed(requestFu);

    }
}

调用:

	//通过初始化的上下文得到数据
        SharedPreferences data = ConfigApplication.sContext.getSharedPreferences("data", 0);
        //传参
        Map<String, String> map = new HashMap<>();
        map.put("userId", data.getString("userId", ""));
        map.put("sessionId", data.getString("sessionId", ""));
        //创建handler
        mHandler = new Handler(Looper.getMainLooper());
        //创建client
        mClient = new OkHttpClient.Builder()
                ....
                .addInterceptor(new Util_interptor(map))
                .build();

上下文:
在这里插入图片描述
SharedPreferences 的创建

//获取pref对象
        mPreferences = getSharedPreferences("data", MODE_PRIVATE);
        //操作类
        mEditor = mPreferences.edit();

//存数据

			//其实就是存我们公共的参数
			mEditor.putString("userId", loginUrl_post_bean.getResult().getUserId() + "");
                        mEditor.putString("sessionId", loginUrl_post_bean.getResult().getSessionId() + "");
                        mEditor.commit();

还有第二种方法

/**
 * date:2018/12/12
 * author:辉(家辉辉辉)
 * function:拦截器
 */
public class Util_interptor implements Interceptor {



    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取原始的Request请求
        Request request = chain.request();

        //通过初始化的上下文得到数据
        SharedPreferences data = ConfigApplication.sContext.getSharedPreferences("data", 0);

        String userId = data.getString("userId", "");
        String sessionId = data.getString("sessionId", "");


        //如果有一个为空,不用添加请求头
        if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(sessionId)) {
            return chain.proceed(request);
        }

        Request build = request.newBuilder()
                .addHeader("userId", userId)
                .addHeader("sessionId", sessionId)
                .build();
        return chain.proceed(build);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OkHttp是一个用于处理HTTP请求的开源Java库。它提供了一个拦截器机制,可以在发送请求和接收响应之前对它们进行修改和处理。以下是关于OkHttp拦截器的一些介绍和示例: 1. OkHttp拦截器是一个接口,它有一个方法intercept(Chain chain),该方法接收一个Chain对象作为参数,该对象表示当前的拦截器链。 2. 拦截器链是按照添加顺序执行的,每个拦截器都可以选择将请求传递给下一个拦截器或者直接返回响应。 3. 拦截器可以在请求和响应中添加、修改或删除头信息,也可以重试请求或者记录请求和响应的日志等。 以下是一个简单的OkHttp拦截器示例,它会在请求头中添加一个自定义的User-Agent信息: ```java public class UserAgentInterceptor implements Interceptor { private static final String USER_AGENT_HEADER = "User-Agent"; private final String userAgent; public UserAgentInterceptor(String userAgent) { this.userAgent = userAgent; } @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Request newRequest = request.newBuilder() .header(USER_AGENT_HEADER, userAgent) .build(); return chain.proceed(newRequest); } } ``` 在上面的示例中,我们创建了一个名为UserAgentInterceptor的拦截器,它接收一个User-Agent字符串作为参数。在intercept方法中,我们首先获取当前的请求对象,然后使用Request.Builder添加一个自定义的User-Agent头信息,最后使用chain.proceed方法将请求传递给下一个拦截器或者返回响应。 以下是一个使用上面定义的拦截器的示例: ```java OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new UserAgentInterceptor("MyApp/1.0")) .build(); ``` 在上面的示例中,我们创建了一个OkHttpClient对象,并使用addInterceptor方法添加了一个UserAgentInterceptor拦截器。这样,在发送请求时,OkHttp会自动调用我们定义的拦截器,并在请求头中添加一个自定义的User-Agent信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值