Ktor 无法在服务器上接收 POST 正文

Posted

技术标签:

【中文标题】Ktor 无法在服务器上接收 POST 正文【英文标题】:Ktor unable to receive POST body on Server 【发布时间】:2018-09-28 10:16:10 【问题描述】:

我有以下服务器和客户端代码:

服务器:

fun Application.main() 
    install(DefaultHeaders)
    install(CallLogging)
    install(Routing) 
        post("/") 
            val requestBody = call.receiveText()
            println("Received $requestBody")
            call.respond("Hello from server - received $requestBody")
        
    


fun main(args: Array<String>) 
    embeddedServer(Netty, 8080) 
        main()
    .start(wait = true)

客户:

fun main(args: Array<String>) = runBlocking 
    HttpClient(CIO).use 
        val postResult = it.post<String>("http://localhost:8080/") 
            body = "Client Hello"
        
        println(postResult)
    

所以,客户端只是在 POST 正文中向服务器发送“Client Hello”,服务器会对此作出响应。 但是我没有在服务器端看到正文的内容。我究竟做错了什么?

call.receiveText() 始终为空。

【问题讨论】:

您使用的是哪个版本的 ktor?看来0.9.2-alpha-6 没有这个问题。 0.9.2 即将发布。 我用的是0.9.1(所以是最新发布的版本) 【参考方案1】:

该问题已在最近的 Alpha 版 (>= 0.9.2-alpha-5) 中修复,并将很快出现在下一个 0.9.2 版本中。

【讨论】:

谢谢。知道“很快”是什么意思吗? 看来你是一个新的开发者@Jebrains。很高兴为您提供第一个声望点。欢迎使用 ***!【参考方案2】:

如果你的正文请求中有参数,请尝试:

val requestBody = call.receiveParameters()
val value = requestBody["key_name"]

【讨论】:

以上是关于Ktor 无法在服务器上接收 POST 正文的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ktor kotlin 通过 POST 发送 JSON 字符串?

如何在 Ktor 中获取 call.response 的 http 正文?

KTOR - 在 POST 路由中解压缩文件

Swift POST 正文参数未接收

使用 kotlinx.serialization 在 ktor 服务器中接收 Map

当使用 okhttp 发送 post 请求时,服务器接收到的请求正文为空。可能是啥问题?