Avatar ·

Как сделать HTTP запрос в Kotlin?

Всем привет! Возникла необходимость выполнить простой HTTP GET запрос в проекте на Kotlin (JVM). Я новичок в языке, поэтому хочу понять, какой стандартный и рекомендуемый способ сделать это в 2024 году.

Я пробовал использовать класс HttpURLConnection из Java, но код получается очень громоздким и неудобным для чтения. Вот пример того, что я написал:

import java.net.HttpURLConnection
import java.net.URL

fun main() {
    val url = URL("https://jsonplaceholder.typicode.com/posts/1")
    val connection = url.openConnection() as HttpURLConnection
    connection.requestMethod = "GET"
    connection.connectTimeout = 5000
    connection.readTimeout = 5000
    val responseCode = connection.responseCode
    println("Response Code: $responseCode")
    val body = connection.inputStream.bufferedReader().readText()
    println(body)
    connection.disconnect()
}

Это работает, но я слышал, что в Kotlin есть более элегантные решения, такие как khttp, Fuel или ktor-client. Однако я не хочу подключать тяжелые библиотеки ради одного запроса.

Вопрос: Какой подход вы используете для простых HTTP запросов в Kotlin? Есть ли способ сделать это лаконично без внешних зависимостей, используя только стандартную библиотеку (например, через java.net.URL с extension функциями)? Или лучше всё-таки добавить легковесную библиотеку? Буду благодарен за пример кода и рекомендации по обработке ошибок (timeout, IOException).

Ожидаю получить JSON ответ от сервера и корректно обработать возможные исключения.