자바강사 낙자쌤

안드로이드 HTTP통신시 전송방식(get/post) 설정 이슈 본문

Android

안드로이드 HTTP통신시 전송방식(get/post) 설정 이슈

낙자쌤™ 2022. 2. 23. 11:58
728x90
반응형

안녕하세요? Java강의하는 낙자쌤입니다. 

저는 현재 가산디지털단지에 위치한 한국소프트웨어인재개발원(KOSMO)에서 자바 국비과정을 강의하고 있습니다. 

 

안드로이드 강의를 진행하면서 새롭게 알게 된 사실이 하나 있습니다. 

먼저 HTTP통신을 위한 코드를 보시죠.

try {
    URL url = new URL("접속할 URL");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

    connection.setRequestMethod("GET");
    connection.setDoInput(true);
    connection.setDoOutput(true);
    int responseCode = connection.getResponseCode();
    if (responseCode == HttpURLConnection.HTTP_OK) {
        Log.i(TAG, "HTTP OK 성공");                    
    }
    else {
        Log.i(TAG, "HTTP OK 안됨");
    }
}
catch (Exception e) {
    e.printStackTrace();
}

위와 같이 connection.setRequestMethod("GET") 으로 하면 우리는 당연히 "get방식으로 통신이 된다" 라고 생각하게 되죠. 물론 저도 똑같았습니다. 그렇게 될거라고 생각을 했죠.

 

하지만 결과는 달랐습니다. 

post로 요청이 들어오는겁니다. 

그래서 살짝 멘붕이 왔죠. 지금까지 학생들한테 잘못 설명을 하고 있었던 겁니다. 

HTTP통신에서 get방식이나 post방식을 선택하는것과는 별개로 다음 문장이 문제였는데요...

connection.setRequestMethod("GET");
//InputStream으로 데이터를 가져오겠다는 설정
connection.setDoInput(true);
//outputStream으로 데이터를 넘겨주겠다는 설정
connection.setDoOutput(true);//--> 하지만 요게있음 무조건 POST가 된다.

setDoOutput()를 쓰는순간 스트림이 생성되기 때문에 setRequestMethod()에서 GET을 설정하더라도 전송방식은 POST가 되는것이었습니다. 

따라서 GET방식의 전송을 하려면 아래와 같이 수정하시면 됩니다. 

connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.setDoOutput(false);

이제 테스트 해보면 GET방식으로 요청이 들어오는것을 알 수 있습니다.

오늘의 교훈은 절대 테스트 해보기전에는 될것이다 생각하지 말자 입니다.

 

728x90
반응형

'Android' 카테고리의 다른 글

안드로이드 프로젝트 소스코드 용량 줄이기  (0) 2021.09.26