Кодировать 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"
Какой клиентский движок вы используете?