Okhttp設(shè)置請求日志過濾器崇众,支持打印Post請求參數(shù)

在網(wǎng)絡(luò)請求的時候我們一般會打印日志掂僵,包含請求地址、請求參數(shù)顷歌、返回結(jié)果锰蓬、請求耗時等。

在之前的操作中眯漩,可能會芹扭,在Request執(zhí)行的時候打印一下,Response返回結(jié)果的時候打印一下坤塞。那么這樣在如果同時多個請求的情況下就會產(chǎn)生混亂冯勉,日志里會出現(xiàn)并列多個請求,并列多個結(jié)果摹芙。那么使用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是兩種常見的請求方式灼狰,網(wǎng)上很多文章只是說明了打印請求地址,在Get請求時候這個參數(shù)會拼接在請求地址后面浮禾,而Post請求的參數(shù)是在請求體里面的交胚,因此必需要先獲取到請求體然后遍歷份汗,拿到請求參數(shù)。因此上面代碼中的這部分是為了打印Post請求參數(shù)而來蝴簇。

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();

據(jù)說要配個圖才好看


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杯活,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熬词,更是在濱河造成了極大的恐慌旁钧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件互拾,死亡現(xiàn)場離奇詭異歪今,居然都是意外死亡,警方通過查閱死者的電腦和手機颜矿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門寄猩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骑疆,你說我怎么就攤上這事田篇。” “怎么了箍铭?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵泊柬,是天一觀的道長。 經(jīng)常有香客問我坡疼,道長彬呻,這世上最難降的妖魔是什么衣陶? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任柄瑰,我火速辦了婚禮,結(jié)果婚禮上剪况,老公的妹妹穿的比我還像新娘教沾。我一直安慰自己,他們只是感情好译断,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布授翻。 她就那樣靜靜地躺著,像睡著了一般孙咪。 火紅的嫁衣襯著肌膚如雪堪唐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天翎蹈,我揣著相機與錄音淮菠,去河邊找鬼。 笑死荤堪,一個胖子當(dāng)著我的面吹牛合陵,可吹牛的內(nèi)容都是我干的枢赔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼拥知,長吁一口氣:“原來是場噩夢啊……” “哼踏拜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起低剔,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤速梗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后襟齿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镀琉,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年蕊唐,在試婚紗的時候發(fā)現(xiàn)自己被綠了屋摔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡替梨,死狀恐怖钓试,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情副瀑,我是刑警寧澤弓熏,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站糠睡,受9級特大地震影響挽鞠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狈孔,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一信认、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧均抽,春花似錦嫁赏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至深寥,卻和暖如春攘乒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背惋鹅。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工则酝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人负饲。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓堤魁,卻偏偏與公主長得像喂链,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妥泉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理椭微,服務(wù)發(fā)現(xiàn),斷路器盲链,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 學(xué)習(xí)是一個深入的過程蝇率,不停的反復(fù)的研究,不能浮于表面刽沾,要深入原理本慕。 之前我們了解到springcloud zuul...
    二月_春風(fēng)閱讀 48,263評論 6 22
  • 通過之前發(fā)布的《Spring Cloud構(gòu)建微服務(wù)架構(gòu)(五)服務(wù)網(wǎng)關(guān)》一文,相信大家對于Spring Cloud ...
    程序猿DD閱讀 1,877評論 0 10
  • Servlet過濾器是 Servlet 程序的一種特殊用法侧漓,主要用來完成一些通用的操作锅尘,如編碼的過濾、判斷用戶的登...
    重山楊閱讀 1,213評論 0 12
  • 管道與Aggregation: 文檔結(jié)構(gòu)如下: 例子: MapReduce:文檔結(jié)構(gòu)如下: 例子1:計算男女?dāng)?shù)量M...
    米刀靈閱讀 627評論 0 0