package Ġcn . har 0 1 d . oc ula . http Ċ Ċ import Ġcn . har 0 1 d . oc ula . Spider Thread Factory Ċ import Ġcn . har 0 1 d . oc ula . util . generate Id Ċ import Ġcom . github . kit tin un f . fuel .* Ċ import Ġcom . github . kit tin un f . fuel . core . Fuel Manager Ċ import Ġcom . github . kit tin un f . fuel . core . extensions . json Body Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . net . Http Cookie Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠF uel HttpClient Ġ: ĠAbstract HttpClient () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoggerFactory . getLogger ( Fuel HttpClient :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF uel Manager . instance . executor Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec utors . new Cached ThreadPool ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp ider Thread Factory (" Fuel ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{} Ċ Ċ // ĠTODO : Ġauto Ġdetect Ġhtml Ġcharset ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch ( request : ĠRequest ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġ( id , Ġreq ) Ġ= Ġprepare ( request ) ĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġresponse , Ġresult ) Ġ= Ġreq . response String ( request . charset Ġ?: Ġcharset ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . github . kit tin un f . result . Result . Failure Ġ-> Ġthrow Ġresult . get Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . github . kit tin un f . result . Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ("[ Response ][$ id ] Ġstatus Ġcode : Ġ${ response . statusCode } Ġ Ġcontent Ġlength : Ġ${ response . content Length } Ġ Ġtime : Ġ$ time Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . url . to External Form (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . statusCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . response Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . headers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . headers [" Set - Cookie "]. flatMap Ġ{ ĠHttp Cookie . parse ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . content Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch ( request : ĠRequest , Ġhandler : Ġ( result : ĠResult < Response >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġ( id , Ġreq ) Ġ= Ġprepare ( request ) ĊĠĠĠĠĠĠĠ Ġreq . response String ( request . charset Ġ?: Ġcharset ) Ġ{ Ġ_, Ġresponse , Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . github . kit tin un f . result . Result . Failure Ġ-> Ġhandler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . get Exception () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġcom . github . kit tin un f . result . Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ("[ Response ][$ id ] Ġstatus Ġcode : Ġ${ response . statusCode } Ġ Ġcontent Ġlength : Ġ${ response . content Length } Ġ Ġtime : Ġ$ time Ġms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠResponse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . url . to External Form (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . statusCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . response Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . headers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . headers [" Set - Cookie "]. flatMap Ġ{ ĠHttp Cookie . parse ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . content Length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler ( Result . success ( res )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare ( request : ĠRequest ): ĠPair < String , Ġcom . github . kit tin un f . fuel . core . Request > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġgenerate Id ( 6 ) ĊĠĠĠĠĠĠĠ Ġlogger . debug ("[ Request ][$ id ] Ġ${ request . method } Ġ${ request . url }") ĊĠĠĠĠĠĠĠ Ġif Ġ( proxy Provider . has Any ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Proxy Ġ= Ġproxy Provider . select () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF uel Manager . instance . proxy Ġ= Ġhttp Proxy . to Proxy () Ġ Ġ/// ĠTODO : Ġnot Ġwork ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug ("[ Proxy ][$ id ] Ġuse Ġ$ http Proxy ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF uel Manager . instance . proxy Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġwhen Ġ( request . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . GET Ġ-> Ġrequest . url . http Get () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . POST Ġ-> Ġrequest . url . http Post () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . PUT Ġ-> Ġrequest . url . http Put () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . PATCH Ġ-> Ġrequest . url . http Patch () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . DELETE Ġ-> Ġrequest . url . http Delete () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHttpMethod . HEAD Ġ-> Ġrequest . url . http Head () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreq . allow Redirect s ( request . allow Redirect s ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request . cookies . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . header (" Cookie ", Ġrequest . cookies . join ToString ("& ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( userAgent Provider . has Any ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . header (" User - Agent ", Ġuser Agent Provider . select ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreq . header ( request . headers . toMap ()) ĊĠĠĠĠĠĠĠ Ġreq . timeout ( timeout ) ĊĠĠĠĠĠĠĠ Ġreq . timeout Read ( timeout Read ) ĊĠĠĠĠĠĠĠ Ġrequest . body ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText RequestBody Ġ-> Ġreq . body ( it . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJson RequestBody Ġ-> Ġreq . json Body ( it . json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBytes RequestBody Ġ-> Ġreq . body ( it . bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFile RequestBody Ġ-> Ġreq . body ( it . file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠForm RequestBody Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq . header (" Content - Type ", Ġ" application / x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreq . parameters Ġ= Ġit . form . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( id , Ġreq ) ĊĠĠĠ Ġ} Ċ } Ċ