Я выяснил, как отправить запрос POST с телом JSON на URL, используя URLConnection в Kotlin. Теперь мне интересно, смогу ли я что-нибудь улучшить в своем коде. Моя задача - отправить JSON на URL. Я выбрал URLConnection, потому что эта библиотека уже была частью проекта, над которым я работаю, и я не хочу увеличивать количество зависимостей, если это не критично. Я также должен проверить связь с Mockito. Учитывая все это, могу ли я как-нибудь улучшить код?
/*
* Construct JSON body
* Body has to be turned into a string and then to byte array
* before writing it to the output stream
*/
val body = JSONObject().put("text", "Hello World!").toString() // turn JSON into a string
/*
* Set up https connection
* Content-Type has to be set to application/json
*/
val url = URL("https://...")
val con: HttpsURLConnection = url.openConnection() as HttpsURLConnection
con.requestMethod = "POST"
con.setRequestProperty("Content-Type", "application/json; utf-8")
con.setRequestProperty("Accept", "application/json")
con.connectTimeout = 15 * 1000
con.doOutput = true
/*
* Send message through the https connection
*/
try {
val os: OutputStream = con.outputStream
val input: ByteArray = body.toByteArray(Charset.forName("utf-8"))// break body into byteArray
os.write(input, 0, input.size)
os.close() // closing output stream
}catch (e : IOException){
println("IO Exception: $e")
}
/*
* Parse response
*/
try{
val br = BufferedReader(InputStreamReader(con.inputStream, "utf-8"))
val response = StringBuilder()
br.use { reader ->
reader.lineSequence().forEach {
response.append(it.trim())
}
}
println(response.toString())
br.close() // closing input stream
}catch (e: IOException){
println("Read response exeption: $e")
}finally {
con.disconnect() // closing https connection
}
Большое спасибо!