Okhttp日誌攔截
阿新 • • 發佈:2018-12-29
Http請求
public class HttpUtils { public static String get(String urlString){ OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor())//日誌攔截器 .connectTimeout(10, TimeUnit.SECONDS)//連線超時 .readTimeout(10,TimeUnit.SECONDS)//讀取超時 .writeTimeout(10,TimeUnit.SECONDS)//寫入超時 .build(); Request request = new Request.Builder().url(urlString).get().build(); try { Response response = okHttpClient.newCall(request).execute(); String result = response.body().string(); Log.i("dt","請求結果:"+result); return result; } catch (IOException e) { e.printStackTrace(); } return ""; } public static String postForm(String url,String[] name,String[] value){ OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor())//日誌攔截器 .connectTimeout(10, TimeUnit.SECONDS)//連線超時 .readTimeout(10,TimeUnit.SECONDS)//讀取超時 .writeTimeout(10,TimeUnit.SECONDS)//寫入超時 .build(); FormBody.Builder formBuild = new FormBody.Builder(); for (int i = 0; i < name.length; i++) { formBuild.add(name[i],value[i]); } Request request = new Request.Builder().url(url).post(formBuild.build()).build(); try { Response response = okHttpClient.newCall(request).execute(); String result = response.body().string(); Log.i("dt",result); return result; } catch (IOException e) { e.printStackTrace(); } return ""; } public static String postFile(String url,String[] name,String[] value,String fileParamName,File file){ OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(new LoggingInterceptor())//日誌攔截器 .connectTimeout(10, TimeUnit.SECONDS)//連線超時 .readTimeout(10,TimeUnit.SECONDS)//讀取超時 .writeTimeout(10,TimeUnit.SECONDS)//寫入超時 .build(); MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM); if(file != null){ // MediaType.parse() 裡面是上傳的檔案型別。 RequestBody body = RequestBody.create(MediaType.parse("image/*"), file); String filename = file.getName(); // 引數分別為: 檔案引數名 ,檔名稱 , RequestBody requestBody.addFormDataPart(fileParamName, "jpg", body); } if (name!=null) { for (int i = 0; i < name.length; i++) { requestBody.addFormDataPart(name[i], value[i]); } } Request request = new Request.Builder().url(url).post(requestBody.build()).build(); try { Response response = okHttpClient.newCall(request).execute(); if (response.code()==200) { return response.body().string(); } } catch (IOException e) { e.printStackTrace(); } return ""; } public static String postJson(String url,String jsonString){ OkHttpClient okHttpClient = new OkHttpClient(); RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),jsonString); Request request = new Request.Builder().url(url).post(requestBody).build(); try { Response response = okHttpClient.newCall(request).execute(); return response.body().string(); } catch (IOException e) { e.printStackTrace(); } return ""; } }
自定義類
public class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { //這個chain裡面包含了request和response,所以你要什麼都可以從這裡拿 Request request = chain.request(); long t1 = System.nanoTime();//請求發起的時間 Log.i("dt",String.format("傳送請求 %s on %s%n%s", request.url(), chain.connection(), request.headers())); Response response = chain.proceed(request); long t2 = System.nanoTime();//收到響應的時間 //這裡不能直接使用response.body().string()的方式輸出日誌 //因為response.body().string()之後,response中的流會被關閉,程式會報錯,我們需要創建出一 //個新的response給應用層處理 ResponseBody responseBody = response.peekBody(1024 * 1024); Log.i("dt",String.format("接收響應: [%s] %n返回json:【%s】 %.1fms%n%s", response.request().url(), responseBody.string(), (t2 - t1) / 1e6d, response.headers())); return response; } }