개발일지

Android in A..Z - HTTP (URLConnection) 본문

Android (안드로이드)/HTTP

Android in A..Z - HTTP (URLConnection)

강태종 2021. 3. 12. 13:21

URLConnection

Java에서 HTTP 통신을 제공하는 기본적인 라이브러리이다. JDK 1.1 시절부터 있던 라이브러리고 JDK 1.1은 1997년 2월 19일에 나왔다. 즉 1996년 HTTP/1.0을 기준으로 개발한 라이브러리기 때문에 버그가 있을 수도 있다.


코드

    private fun getUrlencoded() {
        thread {
            (URL("${getURL()}?${getParameter()}").openConnection() as HttpURLConnection).apply {
                doInput = true
                doOutput = false
                requestMethod = "GET"
                connectTimeout = 3000
                readTimeout = 3000
                setRequestProperty("Content-Type", "application/x-www-form-urlencoded")

                try {
                    inputStream.bufferedReader().use {
                        val result = it.readText()
                        Handler(Looper.getMainLooper()).post {
                            binding.resultTextView.text = result
                        }
                    }
                } catch (e: Exception) {
                    val result = "${this.responseCode} : $responseMessage"
                    Handler(Looper.getMainLooper()).post {
                        binding.resultTextView.text = result
                    }
                }

                disconnect()
            }
        }
    }

    private fun getJson() {
        thread {
            (URL(getURL()).openConnection() as HttpURLConnection).apply {
                doInput = true
                doOutput = true
                requestMethod = "GET"
                connectTimeout = 3000
                readTimeout = 3000
                setRequestProperty("Content-Type", "application/json")

                outputStream.bufferedWriter().use {
                    it.write(getParameter())
                }

                try {
                    inputStream.bufferedReader().use {
                        val result = it.readText()
                        Handler(Looper.getMainLooper()).post {
                            binding.resultTextView.text = result
                        }
                    }
                } catch (e: Exception) {
                    val result = "${this.responseCode} : $responseMessage"
                    Handler(Looper.getMainLooper()).post {
                        binding.resultTextView.text = result
                    }
                }

                disconnect()
            }
        }
    }

    private fun post() {
        thread {
            (URL(getURL()).openConnection() as HttpURLConnection).apply {
                doInput = true
                doOutput = true
                requestMethod = "POST"
                connectTimeout = 3000
                readTimeout = 3000
                setRequestProperty("Content-Type", selectedContentType)

                headerFields
                outputStream.bufferedWriter().use {
                    it.write(getParameter())
                }

                try {
                    inputStream.bufferedReader().use {
                        val result = it.readText()
                        Handler(Looper.getMainLooper()).post {
                            binding.resultTextView.text = result
                        }
                    }
                } catch (e: Exception) {
                    val result = "${this.responseCode} : $responseMessage"
                    Handler(Looper.getMainLooper()).post {
                        binding.resultTextView.text = result
                    }
                }

                disconnect()
            }
        }
    }
  • 기본적으로 비동기를 지원하지 않기 때문에 Thread를 새로 만들어서 실행해야한다.
  • URL클래스를 생성하여 openConnection을 사용해 URLConnection 객체를 얻는다.
  • doInput : Response를 받고 Response Message를 확인할 때 true로 설정한다. (기본값 : true)
  • doOutput : HTTP Body에 내용을 적을 때 사용한다. (기본값 : false, true로 설정하면 requestMethod가 자동으로 POST로 변한다.)
  • requestMethod : HTTP Method를 설정한다.
  • connectTimeout : Connect Time Out을 설정한다.
  • readTimeout : Read Time Out을 설정한다.
  • setRequestProperty : HTTP Head에 작성할 내용을 적는다.
  • outputStream : HTTP Body에 내용을 적을 수 있는 Stream이다. 사용하려면 doOutput이 true여야 한다.
  • inputStream : Response Message의 HTTP Body를 읽을 수 있다.
  • headerFields : Response Message의 HTTP Header를 확인을 수 있다.

예제코드

github.com/KangTaeJong98/Example/tree/main/Android/HTTP

 

KangTaeJong98/Example

My Example Code. Contribute to KangTaeJong98/Example development by creating an account on GitHub.

github.com

 

'Android (안드로이드) > HTTP' 카테고리의 다른 글

Android in A..Z - HTTP (Retrofit2)  (0) 2021.03.16
Android in A..Z - HTTP (Volley)  (0) 2021.03.16
Android in A..Z - HTTP (개념)  (0) 2021.03.12
Comments