package Ġcom . xh storm r . app Ċ Ċ import Ġcom . xh storm r . app . handler . Https Proxy Handler Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . Application Call Pipeline Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . engine . c io . C IO Ċ import Ġio . ktor . features . Call Logging Ċ import Ġio . ktor . features . origin Ċ import Ġio . ktor . http . HttpHeaders Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . request . contentType Ċ import Ġio . ktor . request . document Ċ import Ġio . ktor . request . header Ċ import Ġio . ktor . request . host Ċ import Ġio . ktor . request . http Method Ċ import Ġio . ktor . request . http Version Ċ import Ġio . ktor . request . path Ċ import Ġio . ktor . request . port Ċ import Ġio . ktor . request . uri Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . server . engine . Engine API Ċ import Ġio . ktor . server . netty . Net ty Application Call Ċ import Ġorg . slf 4 j . event . Level Ċ Ċ @ Engine API Ċ fun ĠApplication . main () Ġ{ ĊĊĠĠĠ Ġinstall ( Call Logging ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlevel Ġ= ĠLevel . INFO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġclient Ġ= ĠHttpClient ( C IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect Success Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġintercept ( Application Call Pipeline . Setup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠNet ty Application Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request . http Method . value Ġ== Ġio . netty . handler . codec . http . HttpMethod . CONNECT . name ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhost Header Ġ= Ġrequest . header ( HttpHeaders . Host ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . pipeline (). add Before (" http 1 ", Ġ" Https Proxy Handler ", ĠHttp s Proxy Handler ( host Header )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . Continue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġintercept ( Application Call Pipeline . Call ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcall . request ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġrequest . http Version Ġ// Ġ" HTTP / 1 . 1 " ĊĠĠĠĠĠĠĠ Ġval Ġhttp Method Ġ= Ġrequest . http Method Ġ// ĠGET , ĠPOST ... ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġrequest . uri Ġ// ĠShort Ġcut Ġfor Ġ` origin . uri ` ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġrequest . path () Ġ// ĠThe Ġuri Ġwithout Ġthe Ġquery Ġstring ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġrequest . document () Ġ// ĠThe Ġlast Ġcomponent Ġafter Ġ'/' Ġof Ġthe Ġuri ĊĠĠĠĠĠĠĠ Ġval Ġscheme Ġ= Ġrequest . origin . scheme Ġ// Ġ" http " Ġor Ġ" https " ĊĠĠĠĠĠĠĠ Ġval Ġremote Host Ġ= Ġrequest . origin . remote Host Ġ// ĠThe ĠIP Ġaddress Ġof Ġthe Ġclient Ġdoing Ġthe Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġrequest . host () Ġ// ĠThe Ġhost Ġpart Ġwithout Ġthe Ġport ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġrequest . port () Ġ// ĠPort Ġof Ġrequest ĊĠĠĠĠĠĠĠ Ġval Ġcontent Length Ġ= Ġrequest . content Length () ĊĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġrequest . contentType () ĊĠĠĠĠĠĠĠ Ġprintln (" version : Ġ$ version ") ĊĠĠĠĠĠĠĠ Ġprintln (" http Method : Ġ$ http Method ") ĊĠĠĠĠĠĠĠ Ġprintln (" uri : Ġ$ uri ") ĊĠĠĠĠĠĠĠ Ġprintln (" path : Ġ$ path ") ĊĠĠĠĠĠĠĠ Ġprintln (" document : Ġ$ document ") ĊĠĠĠĠĠĠĠ Ġprintln (" scheme : Ġ$ scheme ") ĊĠĠĠĠĠĠĠ Ġprintln (" remote Host : Ġ$ remote Host ") ĊĠĠĠĠĠĠĠ Ġprintln (" host : Ġ$ host ") ĊĠĠĠĠĠĠĠ Ġprintln (" port : Ġ$ port ") ĊĠĠĠĠĠĠĠ Ġprintln (" content Length : Ġ$ content Length ") ĊĠĠĠĠĠĠĠ Ġprintln (" contentType : Ġ$ contentType ") ĊĠĠĠĠĠĠĠ Ġrequest . headers . sanitize (). forEach Ġ{ Ġs , Ġlist Ġ-> Ġprintln ("$ s Ġ|| Ġ$ list ") Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" --------------- ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . request Application Request ( call . request ) ĊĊĠĠĠĠĠĠĠ Ġcall . respond HttpResponse ( response ) ĊĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} Ċ } Ċ