Programer/Android (Java)

JAVA 소켓으로 웹페이지 정보 가져오기

아즈샤 2013. 7. 3. 10:23
반응형

음 갑자기 소켓 이야기가 나와서 당황하시지는 않으셨지요?

다른 카테고리에 만들려고 했는데, 2단계 밖에 안되서 따로 추가하기 불편하군요.. 흠 다른 목록을 만들어야 되는지..

아래는 스레드와 소켓, HTTP GET 명령어를 사용하여 특정 페이지를 파싱해오는 소스입니다.


혼자서 사용할 일이 있어서 작성했는데 혹시 필요한 분이 있으면 사용하시기 바랍니다. (과연 도움이 되는 소스일려나;)

  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.File;  
  4. import java.io.FileWriter;  
  5. import java.io.IOException;  
  6. import java.io.InputStreamReader;  
  7. import java.io.OutputStreamWriter;  
  8. import java.net.Socket;  
  9.   
  10. /* Main Class */  
  11. public class Example1{  
  12.     public static void main(String[] args){  
  13.         String url="www.naver.com";   // Host 정보  
  14.         String page1="/test/aaa.php";           // Page1 정보  
  15.         String page2="/test/bbb.php";           // Page2 정보  
  16.           
  17.         //Thread 생성  
  18.         Thread tpHTML1 = new Thread(new parsingHTML(url, page1)); //aaa.php  
  19.         Thread tpHTML2 = new Thread(new parsingHTML(url, page2)); //bbb.php  
  20.           
  21.         //Thread 시작  
  22.         tpHTML1.start();  
  23.         tpHTML2.start();  
  24.     }  
  25. }  
  26.   
  27. /* Parsing 을 위한 클래스 */  
  28. class parsingHTML implements Runnable{  
  29.     String page = null;     //Page 정보  
  30.     String url = null;      //Host Url 정보  
  31.     String data = "";       //Data 정보  
  32.     int contentLength = 0;  //contentLength 정보  
  33.       
  34.     public parsingHTML(String url, String page){  
  35.         this.url = url;     //Host parameter를 방음  
  36.         this.page = page;   //Page parameter를 받음  
  37.     }  
  38.       
  39.     /* HTML 데이터를 가져오기 위한 메소드 */  
  40.     public void readData(){  
  41.         try {  
  42.             Socket socket = new Socket(this.url,80);        //소켓을 통해 연결  
  43.               
  44.             //소켓 통신 하기 위한 버퍼 생성  
  45.             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  46.             BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  47.               
  48.             //GET 으로 웹페이지 정보 요청  
  49.             bw.write("GET " + page + " HTTP/1.1\n");  
  50.             bw.write("Host: " + url + " :80\n\n");  
  51.             bw.flush();  
  52.               
  53.             //웹페이지 정보를 받기위한 문자열  
  54.             String newLine = "";  
  55.              
  56.             //웹페이지 정보에서  Content-Length 정보를 Parsing  
  57.             while((newLine = br.readLine())!=null){  
  58.                 if (newLine.startsWith("Content-Length: ")) {  
  59.                     this.contentLength = Integer.parseInt(newLine.substring(16));   //Content-Length 값 할당  
  60.                     continue;  
  61.                 }  
  62.                   
  63.                 //웹페이지 정보에서 <body> 정보를  Parsing  
  64.                 if (newLine.equals("")) {                       //body 내용이 시작 될 때  
  65.                     for(int i=0; i<this.contentLength;i++){     //Content-Length 만큼 정보를 가져옴  
  66.                         char data = (char)br.read();  
  67.                         this.data = this.data + data;           //data 값에 String 혛 변환 후 할당  
  68.                     }  
  69.                     break;  
  70.                 }  
  71.             }  
  72.               
  73.             socket.close();     //소켓 종료  
  74.               
  75.         }catch(Exception e){  
  76.             e.printStackTrace();  
  77.         }         
  78.     }  
  79.       
  80.     /* data를 TXT 파일오 쓰기위한 메소드 */  
  81.     public void writeDataFile() {  
  82.         try{  
  83.             File test = new File("C:\\test");       //C:\test 폴더 생성  
  84.             test.mkdir();  
  85.             FileWriter fw = new FileWriter("C:\\test\\"+ this.page.substring(5, 9) +".txt");    //aaa, bbb로 txt파일 생성  
  86.             fw.write(this.data);    //data 쓰기  
  87.             fw.close();  
  88.         }catch (IOException e) {  
  89.             e.printStackTrace();  
  90.         }  
  91.               
  92.     }  
  93.       
  94.     /* Thread Start */  
  95.     public void run() {  
  96.             this.readData();  
  97.             this.writeDataFile();  
  98.     }  
  99. }  


반응형

'Programer > Android (Java)' 카테고리의 다른 글

JAVA 참고 사항  (0) 2014.03.07
JAVA 클래스 - Part 4  (0) 2013.07.16
JAVA 클래스 - Part 3  (0) 2013.06.25
JAVA 클래스 - Part 2  (0) 2013.06.24
JAVA 클래스 - Part 1  (0) 2013.06.18