모바일 앱개발(Kotlin-PHP-Mysql)

[Android Studio] 같은 네트워크 환경에서 열어놓은 아파치 서버로 POST요청 보낼때 URL작성시 주의할 점!

무너박사 2024. 10. 1. 22:23

안녕하세요! 이번 게시물에선 로컬 컴퓨터에 열려있는 아파치 서버로 Android Studio를 통해 POST 요청을 보내는 법을 설명해 보겠습니다. 제가 이 게시물을 왜 작성하는 것이냐면 저는 단순히 Android 기기가 http://127.0.0.1/login.php로 Post 요청을 보내면 정상적으로 응답이 될 줄 알았습니다. 노트북과 핸드폰이 같은 와이파이에 접속한 상태라서 127.0.0.1로 들어가도 괜찮다고 생각을 했지만 아니었습니다!

 

아파치 서버가 열려있는 로컬 컴퓨터의 내부 아이피 주소를 확인한 후 (저의 경우는 192.168.0.9) , http://192.168.0.9/login.php라고 보내주어야 정상적으로 동작을 하게 되었습니다. 평소에 아파치 서버를 그냥 http://localhost/login.php 이런 식으로 접속을 한 터라 제가 착각을 했네요.. 혹시 이 글을 보실 분들에게 도움 되는 정보였으면 하는 바람입니다!

 

코드에 대한 자세한 설명은 다음 게시물인 Kotlin-PHP-MYSQL 연동하기 에서 할 예정입니다!

이 게시글은 웹요청 시 주소에 대한 유의사항을 위해 작성한 게시글입니다.


[웹서버로 POST요청을 보낸 후 응답확인 코드]-약식

override fun onCreate(savedInstanceState: Bundle?) {  //해당 액티비티가 최초 실행되었을때 수행
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.login_main)  // xml 화면 뷰를 연결한다.
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.tvtitle)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }


        mBinding = LoginMainBinding.inflate(layoutInflater)  //xml파일과 액티비티 연결
        setContentView(binding.root)    // xml의 부모 바인딩을 가져온다.
        // binding.tvtitle.setText("")   //텍스트의 값을 변경한다

        binding.btnLogin.setOnClickListener {    //로그인 버튼 클릭시 동작
            var userid: String = binding.sendId.text.toString() //에딧테스트에 입력되있는값
            var userpass: String = binding.sendId.text.toString() //에딧테스트에 입력되있는값

            CoroutineScope(Dispatchers.IO).launch { //네트워크 요청은 백그라운드 스레드에서 실행
                var requestresult = sendPostRequest(userid, userpass)

                withContext(Dispatchers.Main) {	//UI 처리는 메인스레드 에서 실행
                    if (requestresult == 1) {	// sendPostRequest 함수의 반환값이 1이면
                        val intent =
                            Intent(
                                this@LoginActivity,
                                SubActivity::class.java
                            )//다음 화면으로 이동하기 위한 인텐트 객체 생성.
//            intent.putExtra("userid",text_result)
                        startActivity(intent)	//SubActivity 로 이동
                    } else {	//반환값이 0이라면
                        Toast.makeText(	//로그인 실패 메세지 출력
                            this@LoginActivity,
                            "Login failed. Please try again.",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }
            }
        }


// 서버로 HTTP 요청을 보내는 함수
    fun sendPostRequest(userid: String, password: String): Int {
        val url = URL("http://192.168.0.9/login.php")
        val postData = JSONObject()
        postData.put("id", userid)
        postData.put("pass", password)

        val result = with(url.openConnection() as HttpURLConnection) {
            requestMethod = "POST"
            doOutput = true

            val outputStream = BufferedOutputStream(outputStream)
            BufferedWriter(OutputStreamWriter(outputStream, "UTF-8")).use { writer ->
                writer.write(postData.toString())
                writer.flush()
            }


            //url로 데이터 전송후 서버로부터 응답을받는 부분
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader(InputStreamReader(inputStream)).use { reader ->
                    val response = StringBuilder()
                    var line: String?
                    while (reader.readLine().also { line = it } != null) {
                        response.append(line)
                    }
                    //디버깅
                    Log.d("HTTP_POST", "Response: $response")   // 결과값 Logcat 으로 확인가능!
                    return@with 1
                }
            } else {
                Log.e("HTTP_POST", "Error: $responseCode")  //에러발생시 에러코드 출력!
                return@with 0
            }
        }
        return result
    }

[본인 내부 아이피 주소 알아내는 법]

 

1. 우선 CMD 창을 켜준후 ipconfig를 입력합니다. 이후 본인의 IPv4 주소를 확인합니다.


 

2.URL 요청 코드 작성 시 확인했던 내부 아이피주소로 작성하셔야 합니다.


긴 글 읽어주셔서 감사합니다!