【问题标题】:Encode URL in Ktor Client在 Ktor 客户端中编码 URL
【发布时间】:2020-04-15 15:41:44
【问题描述】:

我需要使用 Ktor 客户端发出 GET 请求。我正在使用的 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

【问题讨论】:

    标签: kotlin urlencode ktor ktor-client


    【解决方案1】:

    这不是一个真正的答案,但 cmets 不允许发布大块代码。

    在进一步调查之后,我实际上无法重现您所描述的行为:

    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"

    您使用的是什么客户端引擎?

    【讨论】:

    • 我正在使用Android 引擎和okhttp。版本1.2.4。同时在服务器端解决了它。也会尝试升级到1.2.6
    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2019-05-10
    • 2020-10-20
    • 1970-01-01
    • 2021-05-03
    • 2021-09-12
    • 2020-02-25
    • 2019-12-07
    相关资源
    最近更新 更多