본문 바로가기

Language/Java / JSP

[Java] URL 읽어오기

반응형

개발을 하다보면 의도치 않게 다른 사이트의 URL 을 호출하여 해당 페이지의 내용을 읽어와야 할 경우가 있다.
특정 사이트의 URL을 파싱하여 데이터를 긁어모으는 등과 같은 방법으로도 이용할 수 있는데,
이부분은 엄연한 불법이므로 시도하지 말자.

나같은 경우 서로 다른 도메인간에 API(xml, json) 호출을 Ajax를 통해 할때 해당 방법을 이용한다.
왜 그래야 하는지는 조만간 포스팅 하도록 하겠다.


다른 도메인의 URL을 호출하는것은 java의 URL, URLConnection 객체의 사용으로 가능하다.
해당 객체를 이용하면 URL의 있는 HTML과 같은 태그 내용을 읽을 수 있는데,
리눅스에서 외부 페이지를 다운받는 wget 과 비슷하다.

wget 명령어는 해당 URL 페이지를 시스템에 문서로 다운로드 받을수 있는 반면에,
java에서는 다운로드가 아닌 BufferReader에 저장을 한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;


public class URLReader {

	public static void main(String[] args) {

		
		StringBuffer sbuf = new StringBuffer();
		
		try {
			
			// URL 객체 생성
			URL url = new URL("http://www.naver.com");
			
			// URLConnection 생성
			URLConnection urlConn = url.openConnection();
			
			
			InputStream is = urlConn.getInputStream();
		    InputStreamReader isr = new InputStreamReader(is, "UTF-8");
		    BufferedReader br = new BufferedReader(isr);
		    
		    String str ;
		    while((str=br.readLine()) != null){
		    	
		    	sbuf.append(str + "\r\n") ;
		    	
		    }
		    
		    
		    // 콘솔에 출력하기
		    System.out.println(sbuf.toString()) ;
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		

	}

}