안녕하세요! 이번 게시물에선 로컬 컴퓨터에 열려있는 아파치 서버로 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 요청 코드 작성 시 확인했던 내부 아이피주소로 작성하셔야 합니다.
긴 글 읽어주셔서 감사합니다!
'모바일 앱개발(Kotlin-PHP-Mysql)' 카테고리의 다른 글
[Android Studio] 로그인 한 아이디 저장하는 기능 구현-Kotlin (0) | 2024.10.03 |
---|---|
[Android Studio] (Kotlin ↔ PHP ↔ MYSQL) 연동을 통해 로그인 기능 구현하기 (0) | 2024.10.02 |
[Android Studio] layout폴더와 activity_main.xml 이 없을때 해결방법 (0) | 2024.09.27 |
[Android Studio]안드로이드 스튜디오 무선 기기연결로 작업하기! (1) | 2024.09.24 |
Andriod Studio 설치 및 세팅(feat.에뮬레이터에 검은화면만 나올때 해결방법) (0) | 2024.09.17 |