Core HTTP protocol elements providing standard methods and comprehensive status code definitions with parsing and validation capabilities.
data class HttpMethod(val value: String) {
override fun toString(): StringThe HttpMethod class represents HTTP request methods (verbs) in a type-safe manner.
data class HttpMethod(val value: String) {
companion object {
val HttpStatusCode.Companion.Get: HttpMethod
val HttpStatusCode.Companion.Post: HttpMethod
val HttpStatusCode.Companion.Put: HttpMethod
val HttpStatusCode.Companion.Patch: HttpMethod
val HttpStatusCode.Companion.Delete: HttpMethod
val HttpStatusCode.Companion.Head: HttpMethod
val HttpStatusCode.Companion.Options: HttpMethod
val HttpStatusCode.Companion.DefaultMethods: List<HttpMethod>
fun parse(method: String): HttpMethod
}// Using predefined methods
val getRequest = HttpMethod.Get
val postRequest = HttpMethod.Post
// Parsing custom methods
val customMethod = HttpMethod.parse("PATCH")
val webdavMethod = HttpMethod.parse("PROPFIND")
// Working with method lists
val supportedMethods = HttpMethod.DefaultMethods
println("Supports ${supportedMethods.size} standard methods")val HttpMethod.supportsRequestBody: BooleanExtension property that determines if an HTTP method typically supports request bodies. Returns false for GET, HEAD, OPTIONS, and TRACE methods.
import io.ktor.http.*
val canHaveBody = HttpMethod.Post.supportsRequestBody // true
val noBody = HttpMethod.Get.supportsRequestBody // false
val headNoBody = HttpMethod.Head.supportsRequestBody // falsedata class HttpStatusCode(val value: Int, val description: String) : Comparable<HttpStatusCode> {
override fun toString(): String
override fun equals(other: Any?): Boolean
override fun hashCode(): Int
override fun compareTo(other: HttpStatusCode): Int
fun description(value: String): HttpStatusCodefun HttpStatusCode.Companion.fromValue(value: Int): HttpStatusCode
val HttpStatusCode.Companion.allStatusCodes: List<HttpStatusCode>
fun HttpStatusCode.isSuccess(): BooleanThe isSuccess() extension function returns true for status codes in the 200-299 range.
val HttpStatusCode.Companion.Continue: HttpStatusCode // 100
val HttpStatusCode.Companion.SwitchingProtocols: HttpStatusCode // 101
val HttpStatusCode.Companion.Processing: HttpStatusCode // 102val HttpStatusCode.Companion.OK: HttpStatusCode // 200
val HttpStatusCode.Companion.Created: HttpStatusCode // 201
val HttpStatusCode.Companion.Accepted: HttpStatusCode // 202
val HttpStatusCode.Companion.NonAuthoritativeInformation: HttpStatusCode // 203
val HttpStatusCode.Companion.NoContent: HttpStatusCode // 204
val HttpStatusCode.Companion.ResetContent: HttpStatusCode // 205
val HttpStatusCode.Companion.PartialContent: HttpStatusCode // 206
val HttpStatusCode.Companion.MultiStatus: HttpStatusCode // 207
val HttpStatusCode.Companion.AlreadyReported: HttpStatusCode // 208
val HttpStatusCode.Companion.IMUsed: HttpStatusCode // 226val HttpStatusCode.Companion.MultipleChoices: HttpStatusCode // 300
val HttpStatusCode.Companion.MovedPermanently: HttpStatusCode // 301
val HttpStatusCode.Companion.Found: HttpStatusCode // 302
val HttpStatusCode.Companion.SeeOther: HttpStatusCode // 303
val HttpStatusCode.Companion.NotModified: HttpStatusCode // 304
val HttpStatusCode.Companion.UseProxy: HttpStatusCode // 305
val HttpStatusCode.Companion.SwitchProxy: HttpStatusCode // 306
val HttpStatusCode.Companion.TemporaryRedirect: HttpStatusCode // 307
val HttpStatusCode.Companion.PermanentRedirect: HttpStatusCode // 308val HttpStatusCode.Companion.BadRequest: HttpStatusCode // 400
val HttpStatusCode.Companion.Unauthorized: HttpStatusCode // 401
val HttpStatusCode.Companion.PaymentRequired: HttpStatusCode // 402
val HttpStatusCode.Companion.Forbidden: HttpStatusCode // 403
val HttpStatusCode.Companion.NotFound: HttpStatusCode // 404
val HttpStatusCode.Companion.MethodNotAllowed: HttpStatusCode // 405
val HttpStatusCode.Companion.NotAcceptable: HttpStatusCode // 406
val HttpStatusCode.Companion.ProxyAuthenticationRequired: HttpStatusCode // 407
val HttpStatusCode.Companion.RequestTimeout: HttpStatusCode // 408
val HttpStatusCode.Companion.Conflict: HttpStatusCode // 409
val HttpStatusCode.Companion.Gone: HttpStatusCode // 410
val HttpStatusCode.Companion.LengthRequired: HttpStatusCode // 411
val HttpStatusCode.Companion.PreconditionFailed: HttpStatusCode // 412
val HttpStatusCode.Companion.PayloadTooLarge: HttpStatusCode // 413
val HttpStatusCode.Companion.RequestURITooLong: HttpStatusCode // 414
val HttpStatusCode.Companion.UnsupportedMediaType: HttpStatusCode // 415
val HttpStatusCode.Companion.RequestedRangeNotSatisfiable: HttpStatusCode // 416
val HttpStatusCode.Companion.ExpectationFailed: HttpStatusCode // 417
val HttpStatusCode.Companion.UnprocessableEntity: HttpStatusCode // 422
val HttpStatusCode.Companion.Locked: HttpStatusCode // 423
val HttpStatusCode.Companion.FailedDependency: HttpStatusCode // 424
val HttpStatusCode.Companion.TooEarly: HttpStatusCode // 425
val HttpStatusCode.Companion.UpgradeRequired: HttpStatusCode // 426
val HttpStatusCode.Companion.PreconditionRequired: HttpStatusCode // 428
val HttpStatusCode.Companion.TooManyRequests: HttpStatusCode // 429
val HttpStatusCode.Companion.RequestHeaderFieldsTooLarge: HttpStatusCode // 431val HttpStatusCode.Companion.InternalServerError: HttpStatusCode // 500
val HttpStatusCode.Companion.NotImplemented: HttpStatusCode // 501
val HttpStatusCode.Companion.BadGateway: HttpStatusCode // 502
val HttpStatusCode.Companion.ServiceUnavailable: HttpStatusCode // 503
val HttpStatusCode.Companion.GatewayTimeout: HttpStatusCode // 504
val HttpStatusCode.Companion.VersionNotSupported: HttpStatusCode // 505
val HttpStatusCode.Companion.VariantAlsoNegotiates: HttpStatusCode // 506
val HttpStatusCode.Companion.InsufficientStorage: HttpStatusCode // 507
val HttpStatusCode.Companion.LoopDetected: HttpStatusCode // 508
val HttpStatusCode.Companion.NotExtended: HttpStatusCode // 510
val HttpStatusCode.Companion.NetworkAuthenticationRequired: HttpStatusCode // 511// Using predefined status codes
val success = HttpStatusCode.OK
val notFound = HttpStatusCode.NotFound
val serverError = HttpStatusCode.InternalServerError
// Creating custom status codes
val customStatus = HttpStatusCode(299, "Custom Success")
// Modifying descriptions
val customOk = HttpStatusCode.OK.description("Request Processed Successfully")
// Finding status codes by value
val statusByValue = HttpStatusCode.fromValue(404) // Returns NotFound
// Comparing status codes
val isClientError = status.value in 400..499
val isSuccess = status.value in 200..299
// Working with all status codes
val allStatuses = HttpStatusCode.allStatusCodes
println("Total defined status codes: ${allStatuses.size}")fun handleResponse(status: HttpStatusCode) {
when {
status.value in 200..299 -> println("Success: ${status.description}")
status.value in 300..399 -> println("Redirect: ${status.description}")
status.value in 400..499 -> println("Client Error: ${status.description}")
status.value in 500..599 -> println("Server Error: ${status.description}")
else -> println("Unknown status: $status")
}
}
// Usage
handleResponse(HttpStatusCode.OK)
handleResponse(HttpStatusCode.NotFound)
handleResponse(HttpStatusCode.InternalServerError)