HttpURLConnection 를 이용한 Http 건드리기

Posted by 빵빵빵
2010/12/21 14:31 전산(컴퓨터)/안드로이드



HttpURLConnection 은 Http를 이용하여 웹사이트에 접속해서 데이터를 주고 받을때 사용합니다.

해당 웹서버/WAS 에서 요청헤더의 특정 값이 필요한 경우, 이를 세팅해주어야하며,

응답헤더에서 내려오는 특정 값이 필요한 경우, 해당 값을 가져와야합니다..


        final public static String PUT = "Cookie";
        final public static String GET = "Set-Cookie";


        public static void main(String[] args) {

                HttpURLConnection con = null;
                String line = null;
                String cookie = "1234567890";
                try {
                        URL u = new URL("http://www.google.co.kr");

                        // request
                        HttpURLConnection huc = (HttpURLConnection) u.openConnection();
                        huc.setRequestMethod("GET");
                        huc.setRequestProperty(PUT, cookie);

                        System.out.println("request header setting:" + huc.getRequestProperty(PUT));

                        huc.connect();

                        // response
                        InputStream is = huc.getInputStream();
                        BufferedReader in = new BufferedReader(new InputStreamReader(is));

                        Map m = huc.getHeaderFields();
                        if(m.containsKey(GET)) {
                                Collection c =(Collection)m.get(GET);
                                for(Iterator i = c.iterator(); i.hasNext(); ) {
                                        cookie = (String)i.next();
                                }

                                System.out.println("server response cookie:" + cookie);
                        }
                        /*
                        while(true) {
                                line = in.readLine();
                                if(line==null) break;
                                System.out.println("line:" + line);
                        }*/
                } catch(Exception e) {
                        System.out.println("Exception...");
                        e.printStackTrace();
                } finally {

                }

        }


위의 코드는 특정 사이트로 접속을 하여 요청헤더에 Cookie의 키로 "1234567890"을 전달하고,

응답헤더에서 Set-Cookie의 키의 값을 가져오는 예제가 되겠습니다.


헤더세팅:

HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestProperty("Cookie", "1234567890");


헤더값접근:

HttpURLConnection huc = (HttpURLConnection) u.openConnection();

Map m = huc.getHeaderFields();

 if(m.containsKey("Set-Cookie")) {
        Collection c =(Collection)m.get("Set-Cookie");
        for(Iterator i = c.iterator(); i.hasNext(); ) {
              cookie = (String)i.next();
        }

        System.out.println("server response cookie:" + cookie);
}


헤더값 접근시 유의점으로는 HttpURLConnection 개체의 getHeaderFields() 함수를 통해서 헤더값 전체가 Map으로 리턴이 됩니다. 이 Map 개체의 get 함수를 통해서 가져오는 데이터가 String이 아니라, Collection 개체라는 겁니다..


1) Map 획득

2) Map에서 get 함수를 통해서 Collection 개체 획득

2) Collection 개체에서 Iterator를 통해서 전체 루프를 돌면서 해당 값을 획득(여기에서야 드디어 String 이죠)


전혀 어렵지 않죠...


많은 도움이 되었으면 합니다..


출처 : http://blog.naver.com/hazard11?Redirect=Log&logNo=80028745174

2010/12/21 14:31 2010/12/21 14:31

이 글에는 트랙백을 보낼 수 없습니다