Android:给OHTTP添加Interceptor 拦截器

Android:给OHTTP添加Interceptor 拦截器,第1张

1:需求:

2:OkHttp/Retrofit的实现

现在说到网络框架,应该毫无疑问是Retrofit了。上面说的加密方案说到底还是要在网络请求框架内加上,怎么做入侵最小,怎么做最方便才是重点。

1、坑定不能直接在接口调用层做加密,加参数,这样每个接口都要修改,这是不可能的。

2、ConverterFactory处理,这也是网上可以搜到的很多文章的写法,但我觉得还是有入侵。而且有点麻烦。

3、OkHttp添加拦截器,这种方法入侵最小(可以说没有),实现呢也非常优雅。

参考地址: https://www.waitalone.cn/mobilesecurity/okhttp.html

````java

public class MainActivityextends AppCompatActivity {

        private static final StringTAG =".MainActivity"

        private ButtonbtnSet

        @Override

        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState)

                setContentView(R.layout.activity_main)

                initView()

        }

        private void initView() {

                //创建一个按钮

                btnSet = (Button) findViewById(R.id.btn_set)

                btnSet.setOnClickListener(new View.OnClickListener() {

                @Override

                    public void onClick(View v) {

                            //运行okhttp网络请求

                            initData()

                    }

                })

        }

        private void initData() {

                //添加网址,请求头等等。(我这边没有设置请求头。)

                Request build =new Request.Builder()

                .url("https://www.bilibili.com/index/ding.json")

                .build()

                //OkHttp网络请求主体

                new OkHttpClient.Builder()

                //添加程序拦截器

                .addNetworkInterceptor(new Lnterceptor())

                .build()

                .newCall(build)

                .enqueue(new Callback() {

                @Override

                public void onFailure(Call call, IOException e) {

                }

                @Override

                public void onResponse(Call call, Response response)throws IOException {

                            //成功之后解析数据

                             //response.body().string(),只能使用1次

                            Log.d(TAG,"成功回调日志:"+response.body().string())

                }

        })

    }

    //日志拦截器,需要打印返回的数据

    private class Lnterceptorimplements Interceptor {

        @Override

            public Response intercept(Chain chain)throws IOException {

                //Chain : 链条的意思,通过它可以拿到request对象,还可以发起网络请求拿到response

                //拿到请求对象

                Request request = chain.request()

                //发起网络请求

                Response proceed = chain.proceed(request)

                //response.body().string(),只能使用1次

                //如果这里使用了onResponse成功回调就不能拿使用了

                //Log.d(TAG, "intercept: "+response.body().string())

                //=====================================

                 //相当于是将body拷贝一份

                String string = proceed.peekBody(1024).string()

                Log.d("TAG","拦截器:"+string)

                return proceed

            }

    }

}

````


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11841323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存