Установите пользовательские заголовки для запроса веб-сокета (ktor)

Я устанавливаю соединение с веб-сервером от клиента следующим образом:

val client = HttpClient(CIO).config {
    install(WebSockets)
}

client.webSocket(
        method = HttpMethod.Get,
        host = "127.0.0.1",
        port = 8080,
        path = "/api") {

    // Send and receive messages
}

Я бы хотел добавить к этому запросу http-заголовки.

У Ktor довольно объемная документация, но, несмотря на это, я не могу понять, как это сделать.


person Mark    schedule 31.03.2019    source источник


Ответы (1)


Ответ все-таки нашел:

client.webSocket(
        method = HttpMethod.Get,
        host = "127.0.0.1",
        port = 8080,
        path = "/api",
        request = {
            header("my_header", "my_header_value")
        }
) {
    // more

Как это найти? Из подписи webSocket:

suspend fun HttpClient.webSocket(
        method: HttpMethod = HttpMethod.Get,
        host: String = "localhost",
        port: Int = DEFAULT_PORT,
        path: String = "/",
        request: HttpRequestBuilder.() -> Unit = {},
        block: suspend DefaultClientWebSocketSession.() -> Unit
): Unit

Здесь HttpRequestBuilder звучит как что-то, что может настраивать запросы (и на самом деле есть некоторая документация по этому поводу).

Подпись означает, что request должно быть закрытием с ограниченным объемом, где this будет HttpRequestBuilder.

Это закрытие может затем установить заголовки или изменить другие вещи. Например, есть HttpRequestBuilder.header.

person Mark    schedule 31.03.2019