package Ġmo e . f eng . dan ma qua . util Ċ Ċ import Ġandroid . util . Log Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlinx . TAG Ċ import Ġokhttp 3 .* Ċ import Ġjava . util . regex . Pattern Ċ Ċ object ĠHttp Utils Ġ{ ĊĊĠĠĠ Ġvar Ġclient : ĠOk HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġ. add Interceptor ( Force Https Interceptor ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġfun Ġset Cache ( cache : ĠCache ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclient Ġ= Ġclient . newBuilder (). cache ( cache ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġrequest As Json ( request : ĠRequest , Ġobj Class : ĠClass < T >): ĠT Ġ= Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( request ). execute () ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Request Ġurl : Ġ${ request . url }") ĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Json Ġ= Ġresponse . body ?. string ()?. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( raw Json ?. isNotEmpty () Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal JsonResponse Exception (" Empty Ġbody ", Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠJson Utils . fromJson ( raw Json , Ġobj Class ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal JsonResponse Exception (" Request Ġfail ", Ġresponse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġrequest As Json ( request : ĠRequest ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest As Json ( request , ĠT :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠForce Https Interceptor Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠK NO WN _ SUPPORTED _ HOST S Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPattern . compile ("[ \\ s \\ S ]* \\. hd sl b \\. com ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! request . url . is Https ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġrequest . url . host ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( KNOWN _ SUPPORTED _ HOST S . none Ġ{ Ġit . matcher ( host ). matches () Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , Ġ" Attempt Ġto Ġchange Ġrequest Ġ${ request . url } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" with Ġunsupported Ġhost Ġto Ġhttps ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Url Ġ= Ġrequest . url . newBuilder (). scheme (" https "). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request . newBuilder (). url ( new Url ). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }