Ktor如何从没有body的请求中获取http代码

Ktor how to get http code from request without body

我向服务器发出请求,但响应中没有正文。 因此,响应的 return 值类型是 Unit。

    suspend fun foo(
        url: String,
        id: Long
    ) {
        val requestUrl = "$url/Subscriptions?id=${id}"
        val response = httpApiClient.delete<Unit>(requestUrl) {
            headers {
                append(HttpHeaders.Authorization, createRequestToken(token))
            }
        }
       return response
    }

在这种情况下如何接收已执行请求的代码?

            HttpResponseValidator {
                validateResponse { response ->
                    TODO()
                }
            }

例如,使用类似的构造并抛出错误不是一种选择,因为一个 http 客户端用于多个请求,并且为一个请求创建一个新的 http 客户端很奇怪。还有别的出路吗?

您可以将 HttpResponse 类型指定为类型参数而不是 Unit 以获得允许您访问 status 属性 的 object (HTTP 状态代码),headers,接收响应的body等。这是一个例子:

import io.ktor.client.HttpClient
import io.ktor.client.engine.apache.*
import io.ktor.client.request.*
import io.ktor.client.statement.*

suspend fun main() {
    val client = HttpClient(Apache)
    val response = client.get<HttpResponse>("https://httpbin.org/get")
    // the response body isn't received yet
    println(response.status)
}