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

Привет посетитель! Сегодня мы напишем класс RequestHelper, который поможет нам совершить простой HTTP запрос в Kotlin без дополнительных параметров. Данный способ я использовал в нескольких простых проектах, а полученный HTML потом парсил при помощи Regexp().

Для начала нам понадобится HttpURLConnection, с помощью которого будем «ходить в Сеть». Для чтения данных применим InputStreamReader и BufferedReader, с его методом readText(). Исключения будем обрабатывать при помощи try..catch..finally.

class RequestHelper {
    fun getData(url: String): String {
        val sb = StringBuilder()

        with(URL(url).openConnection() as HttpURLConnection) {
            addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
                    "AppleWebKit/537.36 (KHTML, like Gecko) " +
                    "Chrome/87.0.4280.141 Safari/537.36")

            try {
                val text = inputStream.bufferedReader().readText()
                sb.append(text)
            } catch (ex: Exception) {
                ex.printStackTrace()
            } finally {
                disconnect()
            }

        }
        return sb.toString()
    }
}

Функция работает очень просто. Сначала создается строка при помощи StringBuilder(). Затем мы используем стандартный класс HttpURLConnection вкупе с конструкцией with из Kotlin.

Не забываем добавлять заголовок User-Agent. Зачем? Чтобы некоторые ресурсы не отдавали ошибку вместо контента. Записываем при помощи bufferedReader текст и возвращаем наш ответ. Не забываем после обработки ошибок в блоке try catch закрыть соединение при помощи метода disconnect().

Код из статьи на GitHub — httpRequest

P.S.

Можно конечно оставить одну функцию, без создания класса. Но я использовал класс? потому что в моих проектах этот класс существенно больше, там есть и генерация timestamp, и смена useragent и еще много чего. Поэтому, если Вам все это не нужно, а надо просто отправить HTTP запрос в Kotlin то можно оставить только метод — getData()

Конечно, кроме HttpUrlConnection существует много способов, как получить данные из Сети. Я говорю о таких библиотеках как Retrofit, OkHttp и других. Они существенно расширяют функциональность и позволяют выполнять http запросы в Kotlin синхронно и асинхронно.

В следующих статьях мы подробно рассмотрим приемы работы с различными библиотеками для http запросов в Kotlin, а также изучим: как отправлять POST запросы в Kotlin, как получать и сохранять cookie, прикреплять form data и многое другое.

Ответить

Ваш адрес email не будет опубликован.