본문 바로가기
Developer/Java

[Java] 웹페이지에 접속해서 html 소스 긁어 오기위한 방법

by 순수한소년 2016. 10. 31.
728x90
반응형

자바(Java) 웹페이지에 접속해서 html소스 긁어 오기위한 방법

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

자바에서 웹페이지에 소스를 긁어오기 위한 방법은

여러가지 입니다가장 기본적인 방법은 java.net 패키지를

이용하는 것입니다 apache commons 에서 제공하는

패키지를 사용할수도 있습니다.

 

가장 기본적인 방법은 URL 클래스를 사용하는 것인데

URL  openStream() 함수로 InputStream 객체를

리턴받습니다.

InputStream 에서 바이트 코드를 읽어 char 

캐스팅해 콘솔에 출력하게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public String getOpenStreamHTML(String urlToRead) {
    String result = "";
    try {
        URL url = new URL(urlToRead);
 
        System.out.println("url=[" + url + "]");
        System.out.println("protocol=[" + url.getProtocol() + "]");
        System.out.println("host=[" + url.getHost() + "]");
        System.out.println("content=[" + url.getContent() + "]");
 
        InputStream is = url.openStream();
        int ch;
        while ((ch = is.read()) != -1) {
            System.out.print((char) ch);
            result += (char) ch;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return result;
}

 

또 다른 예는 BufferedReader 객체에 데이터를

담아서 라인단위로 읽어들이는 것입니다.

HttpURLConnection 으로 GET 이나 POST 방식

중 하나를 선택해서 받을수도 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public String getHttpHTML(String urlToRead) {
    URL url;
    HttpURLConnection conn;
    BufferedReader rd;
    String line;
    String result = "";
    try {
        url = new URL(urlToRead);
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        while ((line = rd.readLine()) != null) {
            result += line + "\n";
        }
        rd.close();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

 

아래는 두가지 함수가 포함된 전체 소스에 대한 

내용입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
public class Main {
 
    public static void main(String[] args) {
 
        Main c = new Main();
        // System.out.println(c.getOpenStreamHTML("http://mainia.tistory.com/1187"));
        System.out.println(c.getHttpHTML("http://mainia.tistory.com/1187"));
    }
 
    public String getOpenStreamHTML(String urlToRead) {
        String result = "";
        try {
            URL url = new URL(urlToRead);
 
            System.out.println("url=[" + url + "]");
            System.out.println("protocol=[" + url.getProtocol() + "]");
            System.out.println("host=[" + url.getHost() + "]");
            System.out.println("content=[" + url.getContent() + "]");
 
            InputStream is = url.openStream();
            int ch;
            while ((ch = is.read()) != -1) {
                System.out.print((char) ch);
                result += (char) ch;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
 
    public String getHttpHTML(String urlToRead) {
        URL url;
        HttpURLConnection conn;
        BufferedReader rd;
        String line;
        String result = "";
        try {
            url = new URL(urlToRead);
            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            while ((line = rd.readLine()) != null) {
                result += line + "\n";
            }
            rd.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
 
}

 

실행해서 출력한 결과 입니다콘솔에 표시되는 내용은 

HTTP 프로토콜로 받은 HTML 에 대한 내용입니다.

두가지 함수다 동일한 결과를 얻을수 있을 겁니다.

 

자바(Java) 웹페이지에 접속해서 html 소스 긁어 오기위한 방법

 


728x90
반응형