마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

HTTP통신처리에 GET방식일때와 POST방식일때 차이점이 궁금합니다.

0 추천

코드적으로 차이점이 궁금합니다.

아래의 코드를 보시면

    URL url = new URL(UrlStr);  
    HttpURLConnection http = (HttpURLConnection) url.openConnection(); 
                                             
    http.setRequestMethod("GET");         
    
    http.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 
 
    OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 
    PrintWriter writer = new PrintWriter(outStream); 
    writer.write(UrlStr); 
    writer.flush(); 
 
    InputStreamReader tmp = new InputStreamReader(http.getInputStream(), "EUC-KR");  
    BufferedReader reader = new BufferedReader(tmp); 
    StringBuilder builder = new StringBuilder(); 
    
    String str;
    while ((str = reader.readLine()) != null) {    
         builder.append(str + "\n");                 
     String myResult = builder.toString();     
 
위의 코드를 보시면 HttpURLConnection으로 HTTP통신을 처리하는 메서드중 일부입니다.
유투브 API는 GET방식으로 호출해야된다고 하는데
위와 같은 방식으로 호출하면 문제가 발생하나요?
로그를 찍어보니 
java.net.ProtocolException: method does not support a request body: 
라는 로그가 찍힙니다.
그런데  이 부분을 삭제하면 잘 동작합니다.   
OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 
    PrintWriter writer = new PrintWriter(outStream); 
    writer.write(UrlStr); 
GET방식으로 통신할때는 쏴주는 OutputStream을 쓰면 안되는건가요?
그냥 URL url = new URL(url);
하고 url.getInputStream으로 스트림을 얻어와서 긁으면 데이터가 긁어지더군요..
GET방식으로 요청할때는 OutputStream으로 write를 보내면 안되는건지 궁금합니다.
 
    writer.flush(); 
갸아악 (21,260 포인트) 님이 2014년 7월 14일 질문

1개의 답변

+1 추천
 
채택된 답변
HTTP의 각 메소드의 용도와 차이점은 HTTP 통신의 기본이니까 검색해서 공부하셔야 하고요,

질문에 대해 간단히 답변드리면 GET 방식은 메세지 바디 없이 URL에 파라미터를 붙이는 방식이고,

POST 방식은 메세지 바디에 페이로드를 싣는 방식이에요
b22n (22,940 포인트) 님이 2014년 7월 14일 답변
갸아악님이 2014년 7월 18일 채택됨
추가로 OutputStream을 통해 뭔가를 Write한다는것은 바디에 내용을 쓰는게 됩니다.
...