zoukankan      html  css  js  c++  java
  • Android retrofit2 添加Header body加密,返回参数分析

    1、添加Header

    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    
    //添加Log httpClient.addNetworkInterceptor(getInterceptor(true));

    //添加固定的header参数
    httpClient.readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
    httpClient.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
    httpClient.writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
    //针对不同的情况写 Log  
    private HttpLoggingInterceptor getInterceptor(boolean debug) { HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); if (debug) { interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 测试 } else { interceptor.setLevel(HttpLoggingInterceptor.Level.NONE); // 打包 } return interceptor; }

      

    //添加动态的Header
    httpClient.addInterceptor(new HttpHeadInterceptor());
    private class HttpHeadInterceptor implements Interceptor {
    public HttpHeadInterceptor() {
           
        }
    
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request.Builder requestBuilder = originalRequest.newBuilder();
    
    
            requestBuilder.addHeader("time", "时间");
    //添加User-Agent
    String user = HttpHead.getUserAgent(); requestBuilder.addHeader("User-Agent", user); Request request = requestBuilder.build(); okhttp3.Response response = chain.proceed(request);

    //获取response的header String responseHeadTime
    = response.header("time").toString();return response; } }

    2、生成Retrofit对象

    Retrofit retrofit = new Retrofit.Builder()
                                    .baseUrl("http://xxxxxxxxxxxxxxxxxxxx")
                                    .client(httpClient.build())
                                    .addConverterFactory(GsonConverterFactory.create(date, httpHeadInfo))
                                    .build();
    

      

    GsonConverterFactory是附加器(按照设计模式,好像是AOP,面向切面编程)


    3、body加密的时候,写在GsonConverterFactory的 requestBodyConverter 里

    注意,相对于ASP.Net mvc来说,接口里边传入@Body的话呢,在服务器端是接收不到的。你需要把这些东西通过 FormBody重新赋值一下

        @Override
        public RequestBody convert(T value) throws IOException {
    
            if (value instanceof BaseSign) {
                String jsonstr = gson.toJson(value);
    
                String key = "android";
                Logger.debug("xxx", "AES加密前:" + jsonstr + "     key=" + key);
                key = Md5Util.parseStrToMd5L32(key);
                String newRequest = AESUtils.initEncode(jsonstr, key);
    
                return new FormBody.Builder().add("data", newRequest).build();
    
            } else {
                //这里是不加密的
                return RequestBody.create(MEDIA_TYPE, "");
            }
    

      

  • 相关阅读:
    OC方法交换swizzle详细介绍——不再有盲点
    集合深浅拷贝以及经常遇到的坑(面试常问)
    网络安全——一图看懂HTTPS建立过程
    NSTimer定时器进阶——详细介绍,循环引用分析与解决
    NSRunLoop原理详解——不再有盲点
    灵活、可高度自定义的——Progress进度圈、弹窗、加载进度、小菊花
    swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
    swift学习笔记4——扩展、协议
    swift学习笔记3——类、结构体、枚举
    个推推送处理
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/6992745.html
Copyright © 2011-2022 走看看