// Adapter injectedClient()// No base endpoint, whole URL must be passed each requestClient("http://host:1234/base")// Requests' paths will be appended to supplied base URL// Adapter provided explicitlyClient(adapter)Client(adapter,"http://host:1234/base")
// All client settings parameters are optionals and provide default valuesClient("http://host:1234/base",ClientSettings(contentType="application/json",useCookies=true,headers=mapOf("X-Api-Key"tolistOf("cafebabe")),// Headers to use in all requestsuser="user",// HTTP Basic auth userpassword="password",// HTTP Basic auth passwordinsecure=false,// If true, the client doesn't check server certificatessslSettings=SslSettings()// Key stores settings (check TLS section for details)))
valcookieName="sampleCookie"valcookieValue="sampleCookieValue"// Set the cookie in the clientclient.cookies["sampleCookie"]=HttpCookie(cookieName,cookieValue)// Assert that it is received in the server and change its value afterwardsclient.post("/assertHasCookie?cookieName=$cookieName")client.post("/addCookie?cookieName=$cookieName&cookieValue=${cookieValue}_changed")// Verify that the client cookie is updatedassert(client.cookies[cookieName]?.value==cookieValue+"_changed")
// Key store filesvalidentity="hexagonkt.p12"valtrust="trust.p12"// Default passwords are file name reversedvalkeyStorePassword=identity.reversed()valtrustStorePassword=trust.reversed()// Key stores can be set as URIs to classpath resources (the triple slash is needed)valkeyStore=URL("classpath:ssl/$identity")valtrustStore=URL("classpath:ssl/$trust")valsslSettings=SslSettings(keyStore=keyStore,keyStorePassword=keyStorePassword,trustStore=trustStore,trustStorePassword=trustStorePassword,clientAuth=true// Requires a valid certificate from the client (mutual TLS))valserverSettings=ServerSettings(bindPort=0,protocol=HTTPS,// You can also use HTTP2sslSettings=sslSettings)valserver=serve(serverSettings,serverAdapter){get("/hello"){// We can access the certificate used by the client from the requestvalsubjectDn=request.certificate?.subjectDN?.nameresponse.headers["cert"]=subjectDnok("Hello World!")}}// We'll use the same certificate for the client (in a real scenario it would be different)valclientSettings=ClientSettings(sslSettings=sslSettings)// Create a HTTP client and make a HTTPS requestvalclient=Client(AhcAdapter(),"https://localhost:${server.runtimePort}",clientSettings)client.get("/hello").apply{logger.debug{body}// Assure the certificate received (and returned) by the server is correctassert(headers.require("cert").first().startsWith("CN=hexagonkt.com"))assert(body=="Hello World!")}