개인참고자료/자바(네트워크)

URL - GET 방식으로 URL 주소 호출하기(사용자 쿼리 전달)

경진 2008. 7. 19. 23:03
 GET 방식으로 URL 주소 호출하기

다음(daum.net) 검색창에서 '사과'라고 입력하고 검색 버튼을 클릭한다.
검색어를 입력 한 후 검색 버튼을 클릭하면 주소창에 다음과 같이 변해있다.

search.daum.net/cgi-bin/nsp/search.cgi?w=tot&q=%BB%E7%B0%FA

URL 주소에서 물음표(?) 이하는 '사용자 쿼리'라고 했다. '사용자 쿼리'란 웹 어플리케이션에게 특정한 정보를 제공하는 것다.

다음과 같은 URL 주소를 브라우저에 입력한 후 엔터 키를 입력해본다.

search.daum.net/cgi-bin/nsp/search.cgi?w=tot&q==수박

'수박'이란 단어로 검색된 결과가 나오는 것을 확인할 수 있다.

여기에서 알 수 있는 것은 "q=" 뒤에 검색어를 집어넣으면, 해당 검색어에 대한 검색 결과 나온다
이번에 할 예제는 URLConnection을 이용해서 물음표 이하의 사용자 쿼리 부분을 웹 애플리케이션에게 GET 방식으로 전달함으로써 '다음' 사이트에서 원하는 결과를 얻어내어 파일에 저장하게 하는 예제다. 지금까지는 URL 주소로 지정된 내용을 읽어오는 것만 했지만, 이번에는 URL 주소에게 값을 전달하는 것이다.

GET 방식으로 사용자 쿼리 전달 : DaumSearch

URLConnection을 이용해서 '다음'의 검색 웹 애플리케이션에게 검색해야 할 단어를 GET 방식으로 전달하는 예제다.

import java.io.*;           
import java.net.*;            
           
public class DaumSearch {           
    public static void main(String[] args){       
           
        if (args.length != 2) {   
            System.err.println("사용법: java DaumSearch keyword filename");
            System.exit(1);
        }   
        try{   
            String keyword = URLEncoder.encode(args[0]);
            //http://search.daum.net/cgi-bin/nsp/search.cgi?w=tot&q=%BB%E7%B0%FA   
            String query = "w=tot&q=" + keyword;   
            String u = "http://search.daum.net/cgi-bin/nsp/search.cgi";   
            System.out.println(u + query);   
            URL url = new URL(u);   
            URLConnection connection = url.openConnection();   
            HttpURLConnection hurlc = (HttpURLConnection)connection;   
            hurlc.setRequestMethod("GET");   
            hurlc.setDoOutput(true);   
            hurlc.setDoInput(true);   
            hurlc.setUseCaches(false);   
            hurlc.setDefaultUseCaches(false);   
            PrintWriter out = new PrintWriter(hurlc.getOutputStream());   
            out.println(query);   
            out.close();   
            BufferedReader in = new BufferedReader(new InputStreamReader(hurlc.getInputStream()));   
            PrintWriter pw = new PrintWriter(new FileWriter(args[1]));   
            String inputLine = null;   
            while ((inputLine = in.readLine()) != null){   
                pw.println(inputLine);
            }   
            in.close();   
            pw.close();   
            System.out.println("검색된 결과가 " + args[1] + " 파일에 저장되었습니다.");   
        }catch(Exception ex){       
            System.out.println(ex);   
        }       
    }           
}               

URL 주소의 내용을 단순히 읽어오는 것이 아니라 URL 주소에 해당하는 웹 애플리케이션에 사용자 쿼리 부분을 전송해야 한다. URLConnection 객체를 얻었으면, URLConnection을 이용해서 URL 주소의 내용을 읽어 들이는 것(setDoInput() 메소드 이용)과 URL 주소의 웹 애플리케이션에게 사용자 쿼리를 전달하는 것(setDoOutput() 메소드 이용)을 모두 true로 설정해야한다.

            String u = "http://search.daum.net/cgi-bin/nsp/search.cgi";   
            System.out.println(u + query);   
            URL url = new URL(u);   
            URLConnection connection = url.openConnection();   
            HttpURLConnection hurlc = (HttpURLConnection)connection;   
            hurlc.setRequestMethod("GET");   
            hurlc.setDoOutput(true);   
            hurlc.setDoInput(true);   
            hurlc.setUseCaches(false);   
            hurlc.setDefaultUseCaches(false);   

URLConnection으로부터 OutputStream을 얻어와서 PrintWriter 객체로 변환시킨 후, query 문자열을 println() 메소드를 이용해서 출력했다. 출력한 내용은 URL 주소의 물음표 뒤ㅣㅅ부분의 사용자 쿼리로 웹 애플리케이션에 전달된다.

            String query = "w=tot&q=" + keyword;    
……
            PrintWriter out = new PrintWriter(hurlc.getOutputStream());   
            out.println(query);   
            out.close();   

사용자 쿼리를 전송한 후 URL 주소가 가리키는 내용을 읽어오기 위해서 URLConnection으로부터 InputStream을 얻고 파일에 저장한다.

            PrintWriter pw = new PrintWriter(new FileWriter(args[1]));   
            String inputLine = null;   
            while ((inputLine = in.readLine()) != null){   
                pw.println(inputLine);
            }   
            in.close();   
            pw.close();   
            System.out.println("검색된 결과가 " + args[1] + " 파일에 저장되었습니다.");   

DaumSerch 실행

첫번째 인자는 검색어고 두번째인자는 검색된 결과를 저장하는 파일이다.
(현재는 cgi방식사용하지 않기 때문에 검색된 결과를 얻어 올 수는 없다)

사용자 삽입 이미지