[AOS] HttpUrlConnection

2024. 1. 18. 11:44dev/aos

728x90
반응형

I almost use Android SDK.

 

Retrofit, OkHttp, etc.. many good libraries in web.

but I tried to use Android SDK.

 

because It is very simple and help to understand.

 

language : kotlin

 

 

first, create url & connection instance.

serverUrl type is string.

val url = URL(serverUrl)
val connection = url.openConnection() as HttpURLConnection

 

 

connection custom settingrrr

connection.apply {
    doInput = true
    doOutput = true
    useCaches = false
    defaultUseCaches = false
    requestMethod = "POST"
}

 

 

write : you want to read a server.

// outputStream loginParams
val outputStream: OutputStream = connection.outputStream
outputStream.run {
    write(changeUrlParams(loginParams).toByteArray())
    flush()
    close()
}

 

 

check : response ok

try {
    // request
    val responseCode: Int = connection.responseCode

    // request ok
    if (responseCode == HttpURLConnection.HTTP_OK) {

 

 

read : data transfer server to user

// request ok
if (responseCode == HttpURLConnection.HTTP_OK) {
    val inputStream: InputStream = connection.inputStream
    val reader: BufferedReader = BufferedReader(InputStreamReader(inputStream))
    val response: StringBuilder = StringBuilder()
    var line: String?

    while (reader.readLine().also { line = it } != null) {
        response.append(line)
    }

    reader.close()
    NLog.w("inputStream... reader : ${response.toString()}")

 

 

cookie sync

val cookies = connection.headerFields["Set-Cookie"]
cookies?.let {
    for (cookie in it) {
        // 쿠키 문자열을 쪼개서 필요한 정보 추출
        val cookieParts: Array<String> = cookie.split(";\\s*".toRegex()).toTypedArray()
        val nameValue: Array<String> = cookieParts[0].split("=").toTypedArray()
        val name: String = nameValue[0]
        val value: String = nameValue[1]
        val path: String = if (cookieParts.size > 1) cookieParts[1].substringAfter("path=") else ""
        val domain: String = if (cookieParts.size > 2) cookieParts[2].substringAfter("domain=") else ""

        val webCookie = WebCookie(
            name = name,
            value = value,
            path = path,
            domain = domain
        )

        val cookieString = "$name=$value; path=$path; domain=$domain"
        NLog.i("cookieString:$cookieString")

        CookieManager.getInstance().setCookie(defaultServerUrl, cookieString)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().flush()
        } else {
            CookieSyncManager.getInstance().sync()
        }
    }

 

 

cookie dispose

CookieManager.getInstance().removeAllCookies(null)
CookieManager.getInstance().flush()
728x90
반응형

'dev > aos' 카테고리의 다른 글

[AOS] Firebase Crashlytics  (0) 2024.01.19
[AOS] WebView  (0) 2024.01.19
[AOS] Coroutine  (0) 2024.01.18
[AOS] Gson, Json convert  (0) 2024.01.18
[AOS] Android14  (0) 2024.01.16