Retrofit配置及各情况处理

Retrofit配置及各情况处理,第1张

1、Retrofit创建

2、Retrofit实现Cookie自动化管理

3、Retrofit,Gson解析,请求返回的类型不统一,假如double返回的是null

4、请求参数日志打印

5、统一请求参数添加到请求头中

6、统一请求参数添加到请求body中

7、缓存的拦截

8、BaseUrl动态切换

9、拦截指定接口,动态更改返回值便于测试

点击传送查看

点击传送查看

1.第一种办法,依赖第三方库

配置信息如下

2.第二种办法,拦截器拦截(个人推荐第二种,可控性高)

给大家推荐一个打印日志库,很漂亮的日志结构

然后在httpClientBuilder中添加拦截

然后在httpClientBuilder中添加拦截

然后在httpClientBuilder中添加拦截

然后在httpClientBuilder中添加拦截

用了一个博客中民间大神的拦截动态替换baseUrl方法有点问题,我暂时用了一种简单粗暴方法

上边的路径是我随便写的,post中写全路径,这个优先级最高,同时设置了baseUrl不受影响

给大家一个专门写动态替换baseUrl连接 传送门

有时候我们需要返回指定值测试,可能需要空或者null等,迫于无法修改服务器返回数据,也没必要让后台修改数据,所以引发一个问题,如果拦截返回内容并修改指定字段值

然后在httpClientBuilder中添加拦截

为什么要用消息拦截器?

因为有时候接口不同在排错的时候 需要先从接口的响应中做分析。利用了消息拦截器可以清楚的看到接口返回的所有内容。不需要重新使用fildder等抓包工具来做分析。

1.添加依赖

2.在合适的位置初始化(这里放在了构造,因为是单例,响应的拦截器也只new一次)

3.在retrofit中设置httpclient

setlevel用来设置日志打印的级别,共包括了四个级别:NONE,BASIC,HEADER,BODY

BASEIC:请求/响应行

HEADER:请求/响应行 + 头

BODY:请求/响应航 + 头 + 体

以下是BODY级别的 打印的日志如下

比较安全的方案应该是AES+RSA的加密方式。具体如下图所示。

为什么要这样做呢?

1、RSA是非对称加密,公钥和私钥分开,且公钥可以公开,很适合网络数据传输场景。但RSA加密比较慢,据说比AES慢100倍,且对加密的数据长度也有限制。

2、AES是对称加密,加密速度快,安全性高,但密钥的保存是个问题,在网络数据传输的场景就很容易由于密钥泄露造成安全隐患

3、所以,AES+RSA结合才更好,AES加密数据,且密钥随机生成,RSA用对方(服务器)的公钥加密随机生成的AES密钥。传输时要把密文,加密的AES密钥和自己的公钥传给对方(服务器)。对方(服务器)接到数据后,用自己的私钥解密AES密钥,再拿AES密钥解密数据得到明文。这样就综合了两种加密体系的优点。

4、除上面说的外,还可以加签名,即对传输的数据(加密前)先做个哈希,然后用自己的RSA私钥对哈希签名(对方拿到自己的公钥可以验签),这样可以验证传输内容有没有被修改过。

就java来说,加密的输入和输出都是字节数组类型的,也就是二进制数据,网络传输或本地保存都需要重新编码为字符串。推荐使用Base64。Android 有自带的Base64实现,flag要选Base64.NO_WRAP,不然末尾会有换行影响服务端解码。

Android中Base64加密

总而言之,这些不同语言都有实现库,调用即可,关键是参数要一致,具体还需要和后台联调一下。

rsa加解密的内容超长的问题解决

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

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

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

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

下面的实现,网上也找不到多少可以参考的文章,但不得不说,OkHttp的封装和设计真的很好用,所见即所得。看下源码,就知道该怎么用了,连文档都不用查。

主要注意点:

0、和接口无关的新加的数据放在请求头里。

1、该close的要close,不然会内存泄漏。

2、新旧Request和Response要区分好,新的要替换旧的去传递或返回。

3、要对response.code()做处理,只有在和后台约定好的返回码下才走解密的逻辑,具体看自己的需求,不一定都是200。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存