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 에 대한 내용입니다.
두가지 함수다 동일한 결과를 얻을수 있을 겁니다.
728x90
반응형