package Ġit . sk rape . fetcher . request Ċ Ċ import Ġit . sk rape . Sk rape It Dsl Ċ import Ġit . sk rape . fetcher . request . Url Builder . Protocol Ċ Ċ @ Sk rape It Dsl Ċ public Ġdata Ġclass ĠUrl Builder ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġprotocol Ġof Ġthe ĠURL Ġthe Ġrequest Ġis Ġmade Ġagainst . ĊĠĠĠĠ Ġ* ĠDefaults Ġto ĠHTTP . ĊĠĠĠĠ Ġ* Ġ@ see ĠProtocol Ġfor Ġall Ġpossible Ġvalues . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġprotocol : ĠProtocol Ġ= ĠProtocol . HTTP , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġhostname Ġof Ġthe ĠURL Ġthe Ġrequest Ġis Ġmade Ġagainst . ĊĠĠĠĠ Ġ* ĠDefaults Ġto Ġ" localhost ". ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġhost : ĠString Ġ= Ġ" localhost ", ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġport Ġof Ġthe ĠURL Ġthe Ġrequest Ġis Ġmade Ġagainst . ĊĠĠĠĠ Ġ* ĠDefaults Ġto Ġ 8 0 8 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġport : ĠInt Ġ= Ġ 8 0 8 0 , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġpath Ġof Ġthe ĠURL Ġthe Ġrequest Ġis Ġmade Ġagainst . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġpath : ĠString Ġ= Ġ"", ĊĊĠĠĠ Ġvar Ġfragment : ĠString ? Ġ= Ġnull , Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġquery Param : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġpublic Ġfun Ġquery Param ( init : ĠQuery Param . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Param Ġ= ĠQuery Param (). also ( init ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġenum Ġclass ĠProtocol ( public Ġval Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHTTP (" http "), ĊĠĠĠĠĠĠĠ ĠHTTPS (" https "), ĊĠĠĠĠĠĠĠ ĠFTP (" ftp "), ĊĠĠĠĠĠĠĠ ĠFILE (" file "); ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfind OrDefault ( value : ĠString ): ĠProtocol Ġ= Ġvalues (). find Ġ{ Ġit . value Ġ== Ġvalue Ġ} Ġ?: ĠHTTP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ("${ protocol . value } :// ") ĊĠĠĠĠĠĠĠ Ġappend ( host ) ĊĠĠĠĠĠĠĠ Ġappend ( if Ġ( port Ġ< Ġ 0 ) Ġ"" Ġelse Ġ": $ port ") ĊĠĠĠĠĠĠĠ Ġappend ( if Ġ( path . isNotBlank () Ġ&& Ġ! path . startsWith ("/ ")) Ġ"/ $ path " Ġelse Ġpath ) ĊĠĠĠĠĠĠĠ Ġappend ( fragment ?. let Ġ{ Ġ"# $ it " Ġ} Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġappend ( query Param ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Sk rape It Dsl Ċ public Ġclass ĠQuery Param Ġ{ ĊĠĠĠ Ġprivate Ġval Ġparams : ĠMutable Map < String , ĠString > Ġ= Ġmutable Map Of () ĊĠĠĠ Ġpublic Ġin fix Ġfun ĠString . to ( value : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdo Ġnot Ġignore Ġentries Ġwith Ġvalue Ġnull ĊĠĠĠĠĠĠĠ Ġparams . compute If Absent ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ" null " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġvalue . join ToString ( separator Ġ= Ġ", ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"$ value " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġkey Only Params : ĠMutable List < String > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġpublic Ġoperator Ġfun ĠString . unary Plus () Ġ{ ĊĠĠĠĠĠĠĠ Ġkey Only Params Ġ+= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& $ key =$ value ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Only Params . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("& $ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. replace First ("& ", Ġ"? ") ĊĠĠĠ Ġ} Ċ } Ċ