Кодировать URL в клиенте Ktor

Мне нужно сделать запрос GET с помощью клиента Ktor. URL-адрес, который я использую, передается мне в виде строки из источника, который я не контролирую. Строка URL-адреса содержит запятые, которые клиент Ktor закодировал для%2Cчто нарушает бэкэнд-логику. Есть ли способ запретить Ktor кодировать URL-адрес?

Пример для пояснения:

client.get {
    url(url)
    accept(ContentType.Application.Json)
    method = HttpMethod.Get
}

В следующем коде значение url является https://my.domain/someData,someMoreData но URL исходящего запроса https://my.domain/someData%2CsomeMoreData.

2 ответа

Поскольку заголовок этого вопроса по сути противоположен фактическому содержанию (в котором спрашивается, как ПРЕДОТВРАТИТЬ кодирование), это самый популярный результат поиска по использованию ktor для кодирования параметров URL. Для этого используйте:

fun String.encodeURLParameter(spaceToPlus: Boolean = false): String

а для кодирования форм используйте formUrlEncode .

На самом деле это не ответ, но комментарии не позволяют публиковать большие куски кода.

Изучив его еще раз, я действительно не смог воспроизвести поведение, которое вы описываете:

fun main() {
    runBlocking {
        val server = embeddedServer(Netty, port = 8080) {
            routing {
                trace {
                    application.log.debug(it.buildText())
                }
                get("*") {
                    context.respond(context.request.path())
                }
            }
        }
        server.start()

        val client = HttpClient()
        val url = "http://localhost:8080/someData,someMoreData"
        val r : String = client.get {
            url(url)
            method = HttpMethod.Get
        }
        println(r) // Getting /someData,someMoreData, meaning not encoded
    }
}

Это использует implementation "io.ktor:ktor-client-okhttp:1.2.6"

Какой клиентский движок вы используете?

Другие вопросы по тегам