All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlinx.jupyter.common.SimpleHttpClient.kt Maven / Gradle / Ivy

package org.jetbrains.kotlinx.jupyter.common

import java.io.InputStream
import java.net.HttpURLConnection
import java.net.URL

object SimpleHttpClient : HttpClient {
    override fun makeRequest(request: Request): Response {
        val url = URL(request.url)
        val connection = url.openConnection() as HttpURLConnection

        connection.requestMethod = request.method
        request.headers.forEach { (key, value) ->
            connection.setRequestProperty(key, value)
        }

        request.body?.let {
            connection.doOutput = true
            connection.outputStream.use { os ->
                os.write(it.toByteArray())
                os.flush()
            }
        }

        val responseCode = connection.responseCode

        // Check for redirect
        if (responseCode in 300..399) {
            val newUrl = connection.getHeaderField("Location")
            val newRequest =
                buildRequest(request) {
                    url(newUrl)
                }

            return makeRequest(newRequest) // Recursive call for redirect
        }

        val stream: InputStream? =
            if (responseCode in 200..299) {
                connection.inputStream
            } else {
                connection.errorStream
            }

        val responseText = stream?.bufferedReader()?.use { it.readText() }.orEmpty()

        return ResponseImpl(Status(responseCode), responseText)
    }
}

data class ResponseImpl(override val status: Status, override val text: String) : Response




© 2015 - 2025 Weber Informatics LLC | Privacy Policy