使用OkHttp拦截器,添加统一参数
程序员文章站
2022-07-13 10:58:48
...
场景
大家的应用处于安全考虑,又没有加密呢?又没用一个一个加密参数做验证呢?如果没有那你们就太low了(当然对于懂逆向的这些都没啥用处),如果有你是如何做的呢?
为何做验证
处于安全考虑,http请求都是可以通过抓包工具抓取下来的(Fiddler),抓取下来,我就可以通过模拟请求发送你们的请求,做一款外挂,大伙也可以试试,抓别人的包,然后请求即可...,一般来说如何做呢?就是对一个参数经过一系列算法,然后服务端口回去验证此算法是否正确
流程图
实现逻辑
通过okhttp的拦截器,拦截请求体,对请求体做对应添加数据
所有请求添加请求头拦截器定义
private Interceptor getHeaderIntercepter() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
request=request.newBuilder()
.addHeader("myHeader", "ok")
.addHeader("myHeader", "ok2")
.build();
Response response = chain.proceed(request);
return response;
}
};
}
From表单添加所有参数
private Interceptor getFromIntercepter() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
//参数就要针对body做操作,我这里针对From表单做操作
if (request.body() instanceof FormBody) {
// 构造新的请求表单
FormBody.Builder builder = new FormBody.Builder();
FormBody body = (FormBody) request.body();
//将以前的参数添加
for (int i = 0; i < body.size(); i++) {
builder.add(body.encodedName(i), body.encodedValue(i));
}
//追加新的参数
builder.add("newKye", "newValue");
request = request.newBuilder().post(builder.build()).build();//构造新的请求体
}
Response response = chain.proceed(request);
return response;
}
};
}
GET请求追加参数
private Interceptor getGetParameterIntercepter() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (request.method().equals("GET")) {
//如果是get请求
HttpUrl url = request.url();
HttpUrl newUrl = url.newBuilder()
.addEncodedQueryParameter("newKey", "newValue")
.addEncodedQueryParameter("newKey2", "newvalue2")
.build();
request = request.newBuilder()
.url(newUrl).build();
}
Response response = chain.proceed(request);
return response;
}
};
}
万能请求加参数方法(例如JSON的post请求)
private Interceptor getAddPIntercepter() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody body = request.body();// 得到请求体
Buffer buffer = new Buffer();// 创建缓存
body.writeTo(buffer);//将请求体内容,写入缓存
String parameterStr = buffer.readUtf8();// 读取参数字符串
//如果是json串就解析 从新加餐 如果是字符串就进行修改 具体业务逻辑自己加
//对应请求头大伙按照自己的传输方式 定义
RequestBody requestBody = RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), parameterStr);
request = request.newBuilder().patch(requestBody).build();
Response response = chain.proceed(request);
return response;
}
};
}
总结
关于修改参数,可以从okhttp的拦截器做处理,也可以从Retrofit层做处理,如果是Retrofit层可以通过,自定义ConverterFactory,对请求数据转换,不嫌弃可以我的这个文章:点击打开链接
推荐阅读
-
axios使用拦截器统一处理所有的http请求的方法
-
sql server通过临时存储过程实现使用参数添加文件组脚本复用
-
草图大师相机使用方法汇总 SketchUp设置相机角度/参数/添加场景等
-
sql server使用临时存储过程实现使用参数添加文件组脚本复用
-
使用OkHttp拦截器,添加统一参数
-
Vue添加请求拦截器及vue-resource 拦截器使用
-
详解SpringMVC HandlerInterceptor拦截器的使用与参数
-
keras 使用Lambda 快速新建层 添加多个参数操作
-
axios使用拦截器统一处理所有的http请求的方法
-
OkHttp的基本使用-3(添加拦截器和GET请求的参数拼接)