package Ġcom . it ach i 1 7 0 6 . helper lib . helpers Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġjavax . net . ssl . Https URLConnection Ċ import Ġjavax . net . ssl . SSL Exception Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠK enne th Ġon Ġ 3 0 / 1 2 / 2 0 1 9 . Ċ Ġ* Ġfor Ġcom . it ach i 1 7 0 6 . helper lib . helpers Ġin ĠHelper ĠLibrary Ċ Ġ* Ċ Ġ* ĠStandard Ġclass Ġfor Ġhelping Ġout Ġwith ĠHttp URLConnection Ġor ĠHttp s URL Connections Ċ Ġ* Ċ Ġ* Ġ@ property Ġurl ĠURL ? ĠURL ĠObject Ċ Ġ* Ġ@ property Ġmode ĠInt Ċ Ġ* Ġ@ property Ġfallback Http ĠBoolean Ċ Ġ* Ġ@ property Ġtimeout ĠInt Ċ Ġ* Ġ@ constructor ĠConstruct ĠURL Helper Ġwith Ġa ĠURL Ġobject Ċ Ġ*/ Ċ class ĠURL Helper ( url : ĠURL ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHTTP _ CONN Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHTTPS _ CONN Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHTTP _ QUERY _ TIMEOUT Ġ= Ġ 1 5 0 0 0 Ġ// 1 5 Ġseconds Ġtimeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġurl : ĠURL ? Ġ= Ġurl ĊĠĠĠ Ġprivate Ġvar Ġmode Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfallback Http Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġtimeout Ġ= Ġ- 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmode Ġ= Ġif Ġ( url . protocol . equals (" https ", Ġignore Case Ġ= Ġtrue )) ĠHTTPS _ CONN Ġelse ĠHTTP _ CONN ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġurl ĠString ? ĠString Ġof ĠURL Ġto Ġparse ĊĠĠĠĠ Ġ* Ġ@ constructor ĠConstruct ĠURL Helper Ġwith Ġa ĠString ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( url : ĠString ?) Ġ: Ġthis ( URL ( url )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable Ġthis Ġif Ġyou Ġwish Ġto Ġfallback Ġto ĠHTTP Ġif Ġany ĠHTTPS Ġconnection Ġfails ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġenabled Ġby Ġdefault ĊĠĠĠĠ Ġ* Ġ@ param Ġfallback Http Ġtrue Ġto Ġfallback , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ* Ġ@ return Ġobject Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Fallback To Http ( fallback Http : ĠBoolean ): ĠURL Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fallback Http Ġ= Ġfallback Http ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġcustom Ġtimeout Ġvalue Ġfor Ġthe ĠURL ĠConnection ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDefaults Ġto Ġ[ HTTP _ QUERY _ TIMEOUT ] ĊĠĠĠĠ Ġ* Ġ@ param Ġtimeout ĠCustom Ġtimeout Ġvalue Ġin Ġint ĊĠĠĠĠ Ġ* Ġ@ return Ġobject Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠsetTimeout Values ( timeout : ĠInt ): ĠURL Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġthe ĠHTTP Ġrequest Ġand Ġobtain Ġa ĠString Ġfrom Ġit ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġcan Ġonly Ġbe Ġaccomp lished Ġon Ġa Ġworker Ġthread Ġas Ġit Ġis Ġblocking ĊĠĠĠĠ Ġ* Ġ@ return ĠString Ġof Ġthe Ġrequest ĊĠĠĠĠ Ġ* Ġ@ throws ĠIOException ĠIf Ġan Ġerror Ġoccur rs ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġfun Ġexecute String (): ĠString ? Ġ{ Ġreturn Ġif Ġ( mode Ġ== ĠHTTPS _ CONN ) Ġprocess Https Connection () Ġelse Ġprocess Http Connection () Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġprocess Http Connection (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġurl !!. open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġconn . connect Timeout Ġ= Ġif Ġ( timeout Ġ== Ġ- 1 ) ĠHTTP _ QUERY _ TIMEOUT Ġelse Ġtimeout ĊĠĠĠĠĠĠĠ Ġconn . read Timeout Ġ= Ġif Ġ( timeout Ġ== Ġ- 1 ) ĠHTTP _ QUERY _ TIMEOUT Ġelse Ġtimeout ĊĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= Ġconn . inputStream ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader (` in ` )) ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠ Ġwhile Ġ( reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr . append ( line ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ` in `. close () ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġprocess Https Connection (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġurl !!. open Connection () Ġas ĠHttp s URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . connect Timeout Ġ= Ġif Ġ( timeout Ġ== Ġ- 1 ) ĠHTTP _ QUERY _ TIMEOUT Ġelse Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . read Timeout Ġ= Ġif Ġ( timeout Ġ== Ġ- 1 ) ĠHTTP _ QUERY _ TIMEOUT Ġelse Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . connect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġwill Ġdo Ġa Ġcheck Ġfor ĠHTTPS Ġerror Ġif Ġthere Ġis Ġa Ġfallback Ġsupport Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fallback Http ) Ġif Ġ( conn . response Code Ġ>= Ġ 3 0 0 ) Ġreturn Ġdo Fallback () Ġ// ĠF allback Ġto ĠHTTP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ` in ` Ġ= Ġconn . inputStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠBufferedReader ( InputStream Reader (` in ` )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . readLine (). also Ġ{ Ġline Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstr . append ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ` in `. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstr . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠSSL Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Https Url Conn ", Ġ" SSL Exception Ġhas Ġoccurred !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fallback Http ) Ġreturn Ġdo Fallback () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġdo Fallback (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i (" Https Url Conn ", Ġ" Error Ġdetected Ġin ĠHTTPS ĠConnection . ĠDo ing Ġfallback Ġto ĠHTTP ") ĊĠĠĠĠĠĠĠ Ġurl Ġ= ĠURL (" http ", Ġurl !!. host , Ġurl !!. port , Ġurl !!. file ) ĊĠĠĠĠĠĠĠ Ġreturn Ġprocess Http Connection () ĊĠĠĠ Ġ} Ċ }