본문 바로가기

Android/NetWork

안드로이드/Android HttpURLConnection 에서 GET / POST 방식 사용상의 주의

안드로이드/Android HttpURLConnection 에서 GET / POST 방식 사용상의 주의



1. HttpURLConnection 을 이용하여 GET 혹은 POST 방식으로 특정 서블릿을 호출하는 경우

HttpURLConnection.setRequestMethod("GET") 이라고 명시적으로 GET 을 지정하여도,

특정한 경우에는 내부적으로 POST로 처리함을 주의해야 한다.


HttpURLConnection.getOutputStream() 메소드 내부에서 현재 지정된 method 가 GET 인 경우

강제로 POST 로 변경한다.


따라서, 

con.setRequestMethod("GET");  로 GET 으로 설정했다고 하더라도,

아래의 라인이 추가된다면, 

con.setDoOutput(true);

OutputStream out = con.getOutputStream();

내부적으로 POST 방식으로 변경된다.


2. 실질적으로 웹서버에 접속하여 요청을 보내고 응답을 수신하는 시점은

con.getResponseCode(); 로 판단된다.

getResponseCode() 를 호출하지 않으면, Network Connection 연결 요청 자체가 시도되지 않음이

확인되었다.. 다른 구현에서는 어떠한지 확인할 필요가 있다.


========================== sample code =================================


 
 URL url_obj = new URL("http://테스트서블릿URL");

 HttpURLConnection con = (HttpURLConnection)url_obj.openConnection();

 con.setRequestMethod("GET");              // default is GET

 con.setDoInput(true);                            // default is true

 con.setDoOutput(true);                          //default is false

 InputStream in = con.getInputStream();

 OutputStream out = con.getOutputStream();  // internally change to 'POST'

 int resCode = con.getResponseCode();  // connect, send http reuqest, receive htttp request

 System.out.println ("code = "+ resCode); 




========================= 서버 access.log ================================



 203.242.137.163 - - [25/Jan/2008:16:08:04 +0900] "POST /테스트서블릿 HTTP/1.0" 200 1639
  




출처 : http://charmpa.egloos.com/1336665