Okhttp设置请求日志过滤器,支持打印Post请求参数
2016-12-23 19:37
1301 查看
在网络请求的时候我们一般会打印日志,包含请求地址、请求参数、返回结果、请求耗时等。
在之前的操作中,可能会,在Request执行的时候打印一下,Response返回结果的时候打印一下。那么这样在如果同时多个请求的情况下就会产生混乱,日志里会出现并列多个请求,并列多个结果。那么使用Okhttp的过滤器便能解决这一问题
代码如下:
Get和Post是两种常见的请求方式,网上很多文章只是说明了打印请求地址,在Get请求时候这个参数会拼接在请求地址后面,而Post请求的参数是在请求体里面的,因此必需要先获取到请求体然后遍历,拿到请求参数。因此上面代码中的这部分是为了打印Post请求参数而来。
具体过滤器使用方式很简单在实例化httpClient的时候addInterceptor即可:
据说要配个图才好看
在之前的操作中,可能会,在Request执行的时候打印一下,Response返回结果的时候打印一下。那么这样在如果同时多个请求的情况下就会产生混乱,日志里会出现并列多个请求,并列多个结果。那么使用Okhttp的过滤器便能解决这一问题
代码如下:
public class LogInterceptor implements Interceptor { public static String TAG = "LogInterceptor"; @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); long startTime = System.currentTimeMillis(); okhttp3.Response response = chain.proceed(chain.request()); long endTime = System.currentTimeMillis(); long duration=endTime-startTime; okhttp3.MediaType mediaType = response.body().contentType(); String content = response.body().string(); Log.d(TAG,"\n"); Log.d(TAG,"----------Start----------------"); Log.d(TAG, "| "+request.toString()); String method=request.method(); if("POST".equals(method)){ StringBuilder sb = new StringBuilder(); if (request.body() instanceof FormBody) { FormBody body = (FormBody) request.body(); for (int i = 0; i < body.size(); i++) { sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ","); } sb.delete(sb.length() - 1, sb.length()); Log.d(TAG, "| RequestParams:{"+sb.toString()+"}"); } } Log.d(TAG, "| Response:" + content); Log.d(TAG,"----------End:"+duration+"毫秒----------"); return response.newBuilder() .body(okhttp3.ResponseBody.create(mediaType, content)) .build(); } }
Get和Post是两种常见的请求方式,网上很多文章只是说明了打印请求地址,在Get请求时候这个参数会拼接在请求地址后面,而Post请求的参数是在请求体里面的,因此必需要先获取到请求体然后遍历,拿到请求参数。因此上面代码中的这部分是为了打印Post请求参数而来。
String method=request.method(); if("POST".equals(method)){ StringBuilder sb = new StringBuilder(); if (request.body() instanceof FormBody) { FormBody body = (FormBody) request.body(); for (int i = 0; i < body.size(); i++) { sb.append(body.encodedName(i) + "=" + body.encodedValue(i) + ","); } sb.delete(sb.length() - 1, sb.length()); Log.d(TAG, "| RequestParams:{"+sb.toString()+"}"); } }
具体过滤器使用方式很简单在实例化httpClient的时候addInterceptor即可:
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new LogInterceptor()) .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .retryOnConnectionFailure(false) .build();
据说要配个图才好看
相关文章推荐
- tomcat的acess_log打印post请求参数,分析日志
- 利用volley进行http设置请求头、超时及请求参数设置(post)
- 利用volley进行http设置请求头、超时及请求参数设置(post)
- android RxJava+Retrofit2.0 OkHttp添加日志拦截器和设置请求头
- Retrofit2.0+OkHttp打印Request URL(请求地址参数)
- Nginx反向代理 URL【参数】转换为URL 【Path】,支持Post请求
- 程序中如何打印日志?(三) VC++6.0和BCB6.0都不支持变长参数的宏
- 安卓Volley设置post带参数请求
- Okhttp的Post请求参数在Interceptor中修改
- OKHttp header、post参数不支持中文的解决办法
- vue-resource 设置请求的参数以formData形式以及设置请求的过滤器
- android设置post请求服务器时参数的设置以及JSON参数的设置
- 解决spring设置filter过滤器结合rest风格获取post请求body参数输入流问题
- 中文编码过滤器: 界面输出中文及中文请求参数(post方式有效)编码过滤器
- OkHttp header、post参数不支持中文的解决办法
- 过滤器 打印请求日志
- 【笔记】Asp.Net WebApi对js POST带参数跨域请求的支持方案
- 网络请求工具类之OkHttp3封装(支持缓存、日志、拦截器、断点下载、上传等)
- 打印GC日志 的JVM参数设置
- webapi设置一个Action同时支持get和post请求