HttpResponse

abstract class HttpResponse : 
    HttpMessage,
    CoroutineScope,
    Closeable

A response for HttpClient, second part of HttpClientCall.

Constructors

<init>

HttpResponse()

A response for HttpClient, second part of HttpClientCall.

Properties

call

abstract val call: HttpClientCall

The associated HttpClientCall containing both the underlying HttpClientCall.request and HttpClientCall.response.

content

abstract val content: ByteReadChannel

ByteReadChannel with the payload of the response.

executionContext

val executionContext: Job

A Job representing the process of this response.

requestTime

abstract val requestTime: GMTDate

GMTDate of the request start.

responseTime

abstract val responseTime: GMTDate

GMTDate of the response start.

status

abstract val status: HttpStatusCode

The HttpStatusCode returned by the server. It includes both, the HttpStatusCode.description and the HttpStatusCode.value (code).

version

abstract val version: HttpProtocolVersion

HTTP version. Usually HttpProtocolVersion.HTTP_1_1 or HttpProtocolVersion.HTTP_2_0.

Inherited Properties

headers

abstract val headers: Headers

Message Headers

Functions

close

open fun close(): Unit

Extension Functions

cacheControl

fun HttpMessage.cacheControl(): List<HeaderValue>

Parse CacheControl header.

charset

fun HttpMessage.charset(): Charset?

Parse charset from Content-Type header value.

contentLength

fun HttpMessage.contentLength(): Long?

Parse Content-Length header value.

contentType

fun HttpMessage.contentType(): ContentType?

Parse Content-Type header value.

date

fun HttpMessage.date(): Date?

Parse Date header.

decodeChunked

fun CoroutineScope.decodeChunked(
    input: ByteReadChannel
): DecoderJob

Start a chunked stream decoder coroutine

discardRemaining

suspend fun HttpResponse.discardRemaining(): Unit

Efficiently discards the remaining bytes of HttpResponse.content.

embeddedServer

fun <TEngine : ApplicationEngine, TConfiguration : Configuration> CoroutineScope.embeddedServer(
    factory: ApplicationEngineFactory<TEngine, TConfiguration>,
    port: Int = 80,
    host: String = "0.0.0.0",
    watchPaths: List<String> = emptyList(),
    parentCoroutineContext: <ERROR CLASS> = EmptyCoroutineContext,
    configure: TConfiguration.() -> Unit = {},
    module: Application.() -> Unit
): TEngine

Creates an embedded server with the given factory, listening on host:port

etag

fun HttpMessage.etag(): String?

Parse E-Tag header value.

expires

fun HttpMessage.expires(): Date?

Parse Expires header.

httpServer

fun CoroutineScope.httpServer(
    settings: HttpServerSettings,
    handler: HttpRequestHandler
): HttpServer

Start an http server with settings invoking handler for every request

lastModified

fun HttpMessage.lastModified(): Date?

Parse Last-Modified header.

parseMultipart

fun CoroutineScope.parseMultipart(
    input: ByteReadChannel,
    headers: HttpHeadersMap
): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(
    input: ByteReadChannel,
    contentType: CharSequence,
    contentLength: Long?
): ReceiveChannel<MultipartEvent>
fun CoroutineScope.parseMultipart(
    boundaryPrefixed: ByteBuffer,
    input: ByteReadChannel,
    totalLength: Long?
): ReceiveChannel<MultipartEvent>

Starts a multipart parser coroutine producing multipart events

pinger

fun CoroutineScope.pinger(
    outgoing: SendChannel<Frame>,
    period: Duration,
    timeout: Duration,
    pool: ObjectPool<ByteBuffer> = KtorDefaultPool
): SendChannel<Pong>

Launch pinger coroutine on CoroutineScope that is sending ping every specified period to outgoing channel, waiting for and verifying client’s pong frames. It is also handling timeout and sending timeout close frame

fun CoroutineScope.pinger(
    outgoing: SendChannel<Frame>,
    periodMillis: Long,
    timeoutMillis: Long,
    pool: ObjectPool<ByteBuffer> = KtorDefaultPool
): SendChannel<Pong>

Launch pinger coroutine on CoroutineScope that is sending ping every specified periodMillis to outgoing channel, waiting for and verifying client’s pong frames. It is also handling timeoutMillis and sending timeout close frame

ponger

fun CoroutineScope.ponger(
    outgoing: SendChannel<Pong>,
    pool: ObjectPool<ByteBuffer> = KtorDefaultPool
): SendChannel<Ping>

Launch a ponger actor job on the CoroutineScope sending pongs to outgoing channel. It is acting for every client’s ping frame and replying with corresponding pong

readBytes

suspend fun HttpResponse.readBytes(count: Int): ByteArray

Exactly reads count bytes of the HttpResponse.content.

suspend fun HttpResponse.readBytes(): ByteArray

Reads the whole HttpResponse.content if Content-Length was specified. Otherwise it just reads one byte.

readText

suspend fun HttpResponse.readText(
    charset: Charset? = null
): String

Read the HttpResponse.content as a String. You can pass an optional charset to specify a charset in the case no one is specified as part of the Content-Type response. If no charset specified either as parameter or as part of the response, HttpResponseConfig.defaultCharset will be used.

receive

suspend fun <T> HttpResponse.receive(): T

Tries to receive the payload of the response as an specific type T.

setCookie

fun HttpMessage.setCookie(): List<Cookie>

Parse Set-Cookie header value.

startConnectionPipeline

fun CoroutineScope.startConnectionPipeline(
    input: ByteReadChannel,
    output: ByteWriteChannel,
    timeout: WeakTimeoutQueue,
    handler: HttpRequestHandler
): Job

Start connection HTTP pipeline invoking handler for every request. Note that handler could be invoked multiple times concurrently due to HTTP pipeline nature

vary

fun HttpMessage.vary(): List<String>?

Parse Vary header value.

writeMultipleRanges

fun CoroutineScope.writeMultipleRanges(
    channelProducer: (LongRange) -> ByteReadChannel,
    ranges: List<LongRange>,
    fullLength: Long?,
    boundary: String,
    contentType: String
): ByteReadChannel

Start multirange response writer coroutine

Inheritors

DefaultHttpResponse

class DefaultHttpResponse : HttpResponse

Default HttpResponse implementation.