package Ġme . leon . ext Ċ Ċ import Ġjava . lang . IllegalStateException Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ Ċ private Ġconst Ġval ĠDEFAULT _ TIME _ OUT Ġ= Ġ 1 0 0 0 0 Ċ const Ġval ĠRESP ONSE _ OK Ġ= Ġ 2 0 0 Ċ Ċ fun ĠString . read Bytes From Net ( method : ĠString Ġ= Ġ" GET ", Ġtimeout : ĠInt Ġ= ĠDEFAULT _ TIME _ OUT ) Ġ= ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠURL ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast < Http URLConnection >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Accept - Language ", Ġ" zh - CN , zh ; q = 0 . 9 , en ; q = 0 . 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user - agent ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mozilla / 5 . 0 Ġ( Windows ĠNT Ġ 1 0 . 0 ; ĠW OW 6 4 ) ĠAppleWebKit / 5 3 7 . 3 6 Ġ( KHTML , Ġlike ĠGecko ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Chrome / 8 6 . 0 . 4 2 4 0 . 1 9 8 ĠSafari / 5 3 7 . 3 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Method Ġ= Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . response Code Ġ== ĠRESP ONSE _ OK Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . inputStream ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . read Bytes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġbyte ArrayOf () ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" read Ġbytes Ġerr Ġ${ it . stack trace ()} Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte ArrayOf () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠString . read Stream From Net ( method : ĠString Ġ= Ġ" GET ", Ġtimeout : ĠInt Ġ= ĠDEFAULT _ TIME _ OUT ) Ġ= ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠURL ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast < Http URLConnection >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Accept - Language ", Ġ" zh - CN , zh ; q = 0 . 9 , en ; q = 0 . 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user - agent ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mozilla / 5 . 0 Ġ( Windows ĠNT Ġ 1 0 . 0 ; ĠW OW 6 4 ) ĠAppleWebKit / 5 3 7 . 3 6 Ġ( KHTML , Ġlike ĠGecko ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Chrome / 8 6 . 0 . 4 2 4 0 . 1 9 8 ĠSafari / 5 3 7 . 3 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Method Ġ= Ġmethod ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . response Code Ġ== ĠRESP ONSE _ OK Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . inputStream ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" read Ġbytes Ġerr Ġ${ it . stack trace ()} Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ fun ĠString . read From Net ( resume Url : ĠString Ġ= Ġ"") : ĠString Ġ= ĊĠĠĠ Ġrun Catch ing Ġ{ Ġif Ġ( startsWith (" http ")) ĠString ( this . read Bytes From Net ()) Ġelse Ġ"" Ġ}. getOrElse Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" read Ġerr Ġ${ it . stack trace ()} Ġ") ĊĠĠĠĠĠĠĠ Ġif Ġ( resume Url . isEmpty ()) Ġ"" Ġelse Ġresume Url . read From Net () ĊĠĠĠ Ġ} Ċ Ċ fun ĠString . simple Read From Net (): ĠString Ġ{ ĊĠĠĠ Ġval Ġsplit Ġ= Ġsplit (" Ġ") ĊĠĠĠ Ġval Ġloop Ġ= Ġif Ġ( split . size Ġ== Ġ 1 ) Ġ 1 Ġelse Ġsplit . first (). toInt () ĊĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġloop ). join ToString ( System . line Separator ()) Ġ{ ĠURL ( split . last ()). read Text () Ġ} Ċ } Ċ Ċ fun ĠString . read Headers From Net ( timeout : ĠInt Ġ= ĠDEFAULT _ TIME _ OUT ) Ġ= ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠURL ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Connection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cast < Http URLConnection >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout Ġ= Ġtimeout ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property (" Accept - Language ", Ġ" zh - CN , zh ; q = 0 . 9 , en ; q = 0 . 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Request Property ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" user - agent ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mozilla / 5 . 0 Ġ( Windows ĠNT Ġ 1 0 . 0 ; ĠW OW 6 4 ) ĠAppleWebKit / 5 3 7 . 3 6 Ġ( KHTML , Ġlike ĠGecko ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Chrome / 8 6 . 0 . 4 2 4 0 . 1 9 8 ĠSafari / 5 3 7 . 3 6 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header Fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( System . line Separator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold Indexed ( StringBuilder ()) Ġ{ Ġi , Ġacc , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacc . append ("${ it . first }: Ġ$ s "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġit . second . last Index ) Ġappend ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstack trace Ġ= Ġit . stack trace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" read Ġbytes Ġerr Ġ$ stack trace Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack trace ĊĠĠĠĠĠĠĠ Ġ} Ċ