在 Ktor 客户端中编码 URL

Posted

技术标签:

【中文标题】在 Ktor 客户端中编码 URL【英文标题】:Encode URL in Ktor Client 【发布时间】: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

【问题讨论】:

【参考方案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

以上是关于在 Ktor 客户端中编码 URL的主要内容,如果未能解决你的问题,请参考以下文章

Ktor 客户端 IOS 和自签名证书

在 KTor 客户端中更改身份验证凭据

在单独的线程中初始化 Ktor 可以吗?

无法在 kotlin js 中使用 ktor 客户端发布请求

Ktor sse 客户端断开连接

Ktor 客户端:使用代码 200 处理错误