Okhttpinterceptor____用于打印Okhttp的请求头响应头的信息
来源:互联网 发布:怎么做淘宝客服教程 编辑:程序博客网 时间:2024/06/05 20:00
引包
compile 'com.squareup.okhttp3:okhttp:3.8.1'compile 'com.squareup.okhttp3:logging-interceptor:3.8.1'
自定义打印信息
public class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { //这个chain里面包含了request和response,所以你要什么都可以从这里拿 Request request = chain.request(); long requestTime = System.nanoTime();//请求发起的时间 log(String.format("发送请求 %s on %s%n%s", request.url(), chain.connection(), request.headers())); Response response = chain.proceed(request); long responeseTime = System.nanoTime();//收到响应的时间 //这里不能直接使用response.body().string()的方式输出日志 //因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一 //个新的response给应用层处理 ResponseBody responseBody = response.peekBody(1024 * 1024); log(String.format("接收响应: [%s] %n返回json:【%s】 %.1fms%n%s", response.request().url(), responseBody.string(), (responeseTime - requestTime) / 1e6d, response.headers())); return response; } public void log(String str){ if (isLog) Log.d("meee",getClass()+":\n"+str); } public boolean isLog=false;}
public class NetUtils { //拦截日志 private static LoggingInterceptor logInterceptor = new LoggingInterceptor(); //单例模式,因为内部封装了很多信息例如session,所以最好使用单例模式 private static final OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .addInterceptor(logInterceptor) .build(); private static Handler mHandler = new Handler(Looper.getMainLooper()); public static void get(String url, HashMap<String, String> map, final OnNet getter) { final String urls = getUrl(url, map); new Thread(new Runnable() { @Override public void run() { //请求 Request request = new Request.Builder().url(urls).build(); //响应 Response response = null; try { response = client.newCall(request).execute(); //调用response.isSuccessful()判断是否成功 if (response.isSuccessful()) { //response.body()有很多方法,可以把数据流转换成各种格式 getter.onSuccessed(response.body().string()); } else { getter.onFailed(response.body().string()); } } catch (IOException e) { getter.onFailed(e.getCause() + ""); } } }).start(); } public static void post(final String url, final HashMap<String, String> map, final OnNet callback) { if (!(map == null || map.size() == 0)) { //使用new FormBody.Builder()来传入请求参数 FormBody.Builder builder = new FormBody.Builder(); for (String key : map.keySet()) { String value = map.get(key); builder.add(key, value); } FormBody body = builder.build(); //将body传入请求中 Request request = new Request.Builder().url(url).post(body).build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { mHandler.post(new Runnable() { @Override public void run() { callback.onFailed("请求失败:" + e.getMessage()); } }); } @Override public void onResponse(Call call, final Response response) throws IOException { final String string = response.body().string(); mHandler.post(new Runnable() { @Override public void run() { callback.onSuccessed(string); } }); } }); } } /** * 选择是否打印okhttp请求的信息 * @param flag */ public static void setLogFlag(boolean flag){ logInterceptor.isLog=flag; } //将map参数拼接成get所使用的url public static String getUrl(String url, HashMap map) { if (map == null || map.size() == 0) { return url; } StringBuilder sb = new StringBuilder(); sb.append(url); sb.append("?"); Iterator iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); sb.append(key); sb.append("="); sb.append(value); sb.append("&"); } url = sb.substring(0, sb.length() - 1); return url; }}
阅读全文
0 0
- Okhttpinterceptor____用于打印Okhttp的请求头响应头的信息
- Http的请求头和响应头
- web响应头,请求头的总结
- 常见的请求头和响应头
- HTTP请求头和响应信息的比对
- HTTP请求头和响应信息的比对
- HTTP缓存相关的概念 http请求头信息 http响应头信息
- HTML的请求头信息
- 关于HTTP请求的请求头与响应头含义
- Android okHttp拦截请求头和响应头
- http请求头和响应头的含义
- HTTP请求头和响应头的含义
- http请求头和响应头的含义
- http请求头和响应头的含义
- http请求头和响应头的含义
- http请求头和响应头的含义
- HTTP协议的请求头和响应头讲解
- 常见的HTTP请求头与响应头
- wpf的样式与资源
- Ascii GB2312 GBK unicode UTF-8 来由和区别
- 使用Genymotion运行项目的时候出现Genymotion device supports x86, but APK only supports armeabi-v7a解决方案
- WINDOWS特殊系统路径获取方法
- 生成one-hot编码
- Okhttpinterceptor____用于打印Okhttp的请求头响应头的信息
- Laravel入门教程(二)D
- mt2503 如何使用META DLL API写两个以上IMEI
- Main
- Caffe训练、测试自己的图片数据
- 《Wide & Deep Learning for Recommender Systems》 学习记录
- 【Scikit-Learn 中文文档】交叉分解
- MVP+RxJava+Retrofit实现Banner图
- greendao 断点 多线程下载