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)
}
我向服务器发出请求,但响应中没有正文。 因此,响应的 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)
}