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;    }}
原创粉丝点击