Отправьте POST-запрос, используя HttpsURLConnection в Kotlin - PullRequest
0 голосов
/ 29 февраля 2020

Я выяснил, как отправить запрос 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
           }

Большое спасибо!

...