자바에서는 사이트 데이터를 읽기 위해서 기본적으로 라이브러리들을 제공하고 있다. 대표적인 2가지 방법에 대해서 알아보자.
사이트 데이터를 읽는 다는 것은, 특정 URL(ex:www.naver.com)을 입력하였을 때, HTML(Hyper Text Markup Language), JSON(JavaScript Object Notation), XML(Extensible Markup Language), OpenAPI 등의 데이터를 읽어 들인다는 것을 의미한다.
이렇게 다른 사이트의 데이터를 읽어와서 자신만의 데이터베이스를 구축하는 경우가 많은데, 물론 이것을 서비스 하는 것은 법적으로 문제가 있을수 있게지만 이 데이터로 무언가를 분석하거나, 2차적인 아이디어를 구축하는 경우가 많다.
- openStream
자바에서 기본적으로 제공하는 URL 객체에는 openStream이라는 하위 메소드를 가지고 있다. 이 메소드를 호출하게 되면, 매우 쉽게 사이트의 정보를 읽어들일 수 있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class main {
public static void main(String[] args) throws Exception {
String url = "https://www.oraccle.com/index.html";
urlOpenStream(url);
}
public static void urlOpenStream(String _url) throws Exception {
URL oracle = new URL(_url);
BufferedReader in = new BufferedReader(
neww InputStreamReader(oracle.openStream(), "UTF8"));
String inputLine;
while (inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close;
}
}
urlOpenStream 메소드를 보게 되면 URL만 가지고, InputStreamReader에 스트림을 보내서 처리하는 것을 볼 수 있다. 이런 방식은 심플하지만, 커넥션의 문제등이 발생하는 등의 여러가지 설정을 추가로 할 수 없기 때문에 잘 쓰이지 않는 방식이다.
- HttpURLConnection
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class main {
public static void main(String[] args) throws Exception {
String url = "https://www.oracle.com/index.html";
urlConnection(url);
}
public static void urlConnection(String _url) throws Exception {
URL url = null;
BufferedReader reader = null;
url = new URL(_url);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setReadTimeout(1000);
con.connect();
reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF8"));
String inputLine = null;
while ((inputLine = reader.readLine()) != null {
System.out.println(inputLine);
}
reader.close();
}
}
HttpURLConnection을 사용하게 되면, 다양한 옵션 등을 설정할 수 있게 된다. GET, POST 설정이라든지 Timeout 설정부터 UserAgent 설정등을 사용하여, 보다 사용자가 원하는 형태로 구현할 수 있게 해준다.
참조[needjarvis.tistory.com/258]
URL 클래스
1. URL 클래스는 URL을 추상화 하여 만든 클래스 입니다.
2. URL 클래스는 final 클래스로 되어 있기 때문에 상속하여 사용할 수 없습니다.
3. 모든 생성자는 MalformedURLException 예외를 발생하기 때문에 반드시 예외처리를 해야 합니다.
URLConnection 클래스
URLConnection 클래스는 원격 자원에 접근하는데 필요한 정보를 가지고 있습니다. 필요한 정보란 원격 서버의 헤더 정보, 해당 자원의 길이와 타입 정보, 언어 등을 얻어 올 수 있습니다. URL 클래스는 원격 서버 자원의 결과만을 가져 오지만, URLConnection 클래스는 원격 서버 자원의 결과와 원격 서버의 헤더 정보를 가져 올 수 있습니다.
URLConnection 클래스의 생성
URLConnection 클래스는 추상 클래스이기 때문에 단독적으로 객체를 생성할 수 없습니다. URL 클래스의 객체를 생성해서 URL 클래스의 openConnection() 메서드를 이용해서 객체를 생성해야 합니다. URLConnection 객체가 생성 되었다면 URLConnection 클래스의 connect() 메서드를 호출해야 객체가 완성됩니다.
URL url = new URL("http://java.sum.com");
URLConnection urlCon = url.openConnection();
urlCon.connect();