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

io.slink.http.client.kt Maven / Gradle / Ivy

package io.slink.http

import io.slink.http.internals.trustAllCerts
import okhttp3.FormBody
import okhttp3.Headers.Companion.toHeaders
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import java.security.SecureRandom
import javax.net.ssl.SSLContext
import javax.net.ssl.X509TrustManager


fun OkHttpClient.Builder.noRedirects(): OkHttpClient.Builder {
    followRedirects(false)
    return this
}

fun OkHttpClient.Builder.ignoreSslErrors(): OkHttpClient.Builder {
    val sslContext = SSLContext.getInstance("SSL")
    sslContext.init(null, trustAllCerts, SecureRandom())
    val sslSocketFactory = sslContext.socketFactory
    sslSocketFactory(sslSocketFactory, trustAllCerts[0] as X509TrustManager)
    hostnameVerifier { _, _ -> true }
    return this
}


fun OkHttpClient.Builder.baseUrl(baseUrl: String): OkHttpClient.Builder {
    addInterceptor { chain ->
        val request = chain.request()
        val newRequest = request.newBuilder().url(baseUrl + request.url).build()
        chain.proceed(newRequest)
    }
    return this
}

fun newHttpClient(init: OkHttpClient.Builder.() -> Unit = { }): OkHttpClient {
    val builder = OkHttpClient().newBuilder()
    init(builder)
    return builder.build()
}

fun OkHttpClient.get(url: String, headers: Map = emptyMap()): Response {
    val request = Request.Builder()
            .url(url)
            .get()
            .headers(headers.toHeaders())
            .build()
    return newCall(request).execute()
}

fun OkHttpClient.head(url: String, headers: Map = emptyMap()): Response {
    val request = Request.Builder()
            .url(url)
            .head()
            .headers(headers.toHeaders())
            .build()
    return newCall(request).execute()
}

fun OkHttpClient.post(
        url: String,
        data: String,
        mediaType: String,
        headers: Map = emptyMap()
): Response {
    val request = Request.Builder()
            .url(url)
            .post(data.toRequestBody(mediaType.toMediaType()))
            .headers(headers.toHeaders())
            .build()
    return newCall(request).execute()
}

fun OkHttpClient.postForm(
        url: String,
        data: Map,
        headers: Map = emptyMap()
): Response {
    val formBody = FormBody.Builder()
    data.forEach { (key, value) -> formBody.add(key, value.toString()) }
    val request = Request.Builder()
            .url(url)
            .post(formBody.build())
            .headers(headers.toHeaders())
            .build()
    return newCall(request).execute()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy