반응형
자바(Java) 웹페이지에 접속해서 html 소스 긁어 오기위한 방법 |
개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2 |
자바에서 웹페이지에 소스를 긁어오기 위한 방법은 여러가지 입니다. 가장 기본적인 방법은 java.net 패키지를 이용하는 것입니다. 또 apache commons 에서 제공하는 패키지를 사용할수도 있습니다. |
가장 기본적인 방법은 URL 클래스를 사용하는 것인데
URL 의 openStream() 함수로 InputStream 객체를
리턴받습니다.
InputStream 에서 바이트 코드를 읽어 char 로
캐스팅해 콘솔에 출력하게 됩니다.
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 방식
중 하나를 선택해서 받을수도 있습니다.
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; }
아래는 두가지 함수가 포함된 전체 소스에 대한
내용입니다.
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)' 카테고리의 다른 글
자바(Java) AWT – TextArea 컨트롤을 사용하는 방법 (1) | 2014.12.10 |
---|---|
자바(Java) AWT – TextField 컨트롤 이용하는 방법과 예제 (2) | 2014.12.03 |
자바(Java) AWT – List 컨트롤 구현 방법과 예제 (0) | 2014.11.30 |
자바(Java) AWT – Checkbox 컨트롤 사용법과 예제 (4) | 2014.11.27 |
자바스크립트(javascript) 배열로 구성하여 input 객체에 넣고 POST 넘겼을때 (4) | 2014.09.18 |
웹페이지에서 구글맵 구현 (0) | 2014.02.25 |
Java 에서 Exception 의 내용을 추출하고 싶을 때 (1) | 2014.02.12 |
[Java] 자바 데이터베이스 연동, 오라클(Oracle), MySQL DB 연결 테스트 (0) | 2014.02.09 |