package Ġcom . le ov p . http _ sdk . ret rofit . base Ċ Ċ import Ġcom . le ov p . http _ sdk . okhttp . Http Logging Interceptor Ċ import Ġcom . le ov p . log _ sdk . Log Context Ċ import Ġcom . le ov p . min _ base _ sdk . Ssl Utils Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠAuthor : ĠMichael ĠLe o Ċ Ġ* ĠDate : Ġ 2 0 - 5 - 2 7 Ġä¸ĭåįĪ 8 : 4 1 Ċ Ġ*/ Ċ abstract Ġclass ĠBase HttpRequest Ġ{ ĊĠĠĠ Ġvar Ġconnect Timeout In Ms Ġ= ĠDEFAULT _ CONNECTION _ TIMEOUT _ IN _ MS ĊĠĠĠ Ġvar Ġread Timeout In Ms Ġ= ĠDEFAULT _ READ _ TIMEOUT _ IN _ MS ĊĠĠĠ Ġvar Ġwrite Timeout In Ms Ġ= ĠDEFAULT _ WRITE _ TIMEOUT _ IN _ MS ĊĊĠĠĠ Ġfun Ġget Ok HttpClient ( header Map : ĠMap < String , ĠString >? Ġ= Ġnull ): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠhttpClient Builder Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ ĠhttpClient Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( connect Timeout In Ms , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( read Timeout In Ms , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( write Timeout In Ms , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( getHeader Interceptor ( header Map )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( log Interceptor ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Ssl Utils . certificate InputStream Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient Builder . hostname Verifier ( Ssl Utils . do Not Verifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient Builder . ssl Socket Factory ( Ssl Utils . create Socket Factory ( Ssl Utils . PROTOCOL ), ĠS sl Utils . system Default Trust Manager ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient Builder . hostname Verifier ( Ssl Utils . custom Verifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( Ssl Utils . certificate InputStream , Ġ{ Ġ" For ĠHTTPS , Ġthe Ġcert ification Ġmust Ġnot Ġbe Ġnull . ĠDid Ġyou Ġforget Ġto Ġset ĠS sl Utils . certificate InputStream ?" Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġssl Context Ġ= ĠS sl Utils . get SSL Context ( Ssl Utils . certificate InputStream !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhttpClient Builder . ssl Socket Factory ( ssl Context . first . socket Factory , Ġssl Context . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠhttpClient Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlog Interceptor : ĠInter ceptor ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Interceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Interceptor . level Ġ= ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlog Interceptor Ċ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġnew ĠLogging Interceptor . Builder () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log gable ( Build Config . DEBUG ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLevel ( Level . BASIC ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. log ( Platform . INFO ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request (" Request ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. response (" Response ") Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" version ", ĠBuild Config . VERSION _ NAME ) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add QueryParam (" query ", Ġ" 0 ") Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. logger ( new ĠLogger () Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġlog ( int Ġlevel , ĠString Ġtag , ĠString Ġmsg ) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( tag , Ġmsg ); Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. executor ( Executors . new Single Thread Executor ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Header Interceptor ( header Map : ĠMap < String , ĠString >? Ġ= Ġnull ): ĠInter ceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInter ceptor Ġ{ Ġchain : ĠInter ceptor . Chain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild : ĠRequest . Builder Ġ= Ġchain . request (). newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġyour Ġother Ġheaders Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. add Header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Map ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġheader Map ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Log Context . enable Log ) ĠLog Context . log . d (" Assign Ġcookie : Ġ$ k =$ v ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild . add Header ( k , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( build . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTimeout Ġexplanation ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// future stud . io / tutorials / ret rofit - 2 - customize - network - timeout s ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ CONNECTION _ TIMEOUT _ IN _ MS Ġ= Ġ 3 0 _ 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġread Ġtimeout Ġstarts Ġto Ġpay Ġattention Ġonce Ġthe Ġconnection Ġis Ġestablished Ġand Ġthen Ġw atches ĊĠĠĠĠĠĠĠĠ Ġ* Ġhow Ġfast Ġ( or Ġslow ) Ġevery Ġbyte Ġgets Ġtransferred . ĠIf Ġthe Ġtime Ġbetween Ġtwo Ġbytes Ġgets Ġlarger Ġthan ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġread Ġtimeout , Ġit 'll Ġcount Ġthe Ġrequest Ġas Ġfailed . ĠThe Ġcounter Ġresets Ġafter Ġevery Ġincoming Ġbyte . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThus , Ġif Ġyour Ġresponse Ġhas Ġ 1 2 0 Ġbytes Ġand Ġit Ġtakes Ġfive Ġseconds Ġbetween Ġeach Ġbyte , ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġread Ġtimeout Ġwill Ġnot Ġbe Ġtriggered Ġand Ġthe Ġresponse Ġwill Ġtake Ġten Ġminutes Ġto Ġbe Ġcompleted . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠAgain , Ġthis Ġis Ġnot Ġonly Ġlimited Ġto Ġthe Ġserver . ĠS low Ġread Ġtimes Ġcan Ġbe Ġcaused Ġby Ġthe ĠInternet Ġconnection Ġas Ġwell . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ READ _ TIMEOUT _ IN _ MS Ġ= Ġ 3 0 _ 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġwrite Ġtimeout Ġis Ġthe Ġopposite Ġdirection Ġof Ġthe Ġread Ġtimeout . ĠIt Ġchecks Ġhow Ġfast Ġyou Ġcan ĊĠĠĠĠĠĠĠĠ Ġ* Ġsend Ġbytes Ġto Ġthe Ġserver . ĠOf Ġcourse , Ġit Ġalso Ġgets Ġreset Ġafter Ġevery Ġsuccessful Ġbyte . ĠHowever , ĊĠĠĠĠĠĠĠĠ Ġ* Ġif Ġsending Ġa Ġsingle Ġbyte Ġtakes Ġlonger Ġthan Ġthe Ġconfigured Ġwrite Ġtimeout Ġlimit , ĠRet rofit Ġwill ĊĠĠĠĠĠĠĠĠ Ġ* Ġcount Ġthe Ġrequest Ġas Ġfailed . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ WRITE _ TIMEOUT _ IN _ MS Ġ= Ġ 3 0 _ 0 0 0 L ĊĠĠĠ Ġ} Ċ }