[Android] HTML 읽기 Android 2012. 3. 7. 11:35

http 통신은 다들 잘 알 것이다. 모바일 상에서는 java.net을 이용하여 이 내용을 사용하는데 get과 post가 자유롭다고 한다.

http 는 url을 통하여 데이터를 전송하는데 url 클래스 인자는 다음과 같이 두가지가 있다

URL(URL context, String spec)과 URL(String protocal, String host, int port, String file) 이다.

다음은 URL의 각 부분을 분리하는 메서드들이다.

메서드 리턴  설명 
String getProtocal() http  통신 프로토콜 
int getDefaultPort() 80 디폴트 포트 
int getPort() -1 URL의 포트, 없을 시 -1 
String getHost() www.url.com 서버주소
String getFile() /data?param=1 path와 쿼리
String getPath() /data 서버 경로
String getQuery() param=1 서버 전달 쿼리 변수 값

접속하는 주소가 정해지면 URLConnection 객체를 통해서 접근한다. 여기에 대한 메서드들은 다음과 같다.

메서드 설명 
setConnectTimeout(int timout) 연결 제한 시간을 1/1000 단위로 지정, 0일 경우 무한
setReadTimeout(int timeout) 읽기 제한 시간 지정, 0일 경우 무한
set UseCaches(Boolean flag) 캐시 사용 여부 지정
setDoInput(boolean flag) 입력 지정
setDoOutput(boolean flag) 출력 지정
setRequestProperty(String field, String value) 요청 헤더 값 설정
addRequestProperty(String field, String value)  헤더 속성 값 추가

다음은 간단히 HTML을 읽어오는 코드이다.

public class ImageViewActivity extends Activity{
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main);
  Button r_btn = (Button)findViewById(R.id.read);
  r_btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v){
    String html = DownloadHtml("http://google.com");
    EditText edit = (EditText)findViewById(R.id.edit_txt);
    edit.setText(html);
   }
  });
 } 
 private String DownloadHtml(String string) {
  StringBuilder html = new StringBuilder();
  try{
   URL url = new URL(string);
   HttpURLConnection connect = (HttpURLConnection)url.openConnection();
   if(connect!=null){
    connect.setConnectTimeout(1000);
    connect.setUseCaches(false);
    if(connect.getResponseCode()==HttpURLConnection.HTTP_OK){
     BufferedReader br = new BufferedReader(new InputStreamReader(connect.getInputStream()));
     for(;;){
      String line = br.readLine();
      if(line==null) break;
      html.append(line+'\n');
     }
     br.close();
    }
    connect.disconnect();    
   }
  }
  catch(Exception ex){}
  return html.toString();
 }
}

위에서 자바 코드를 썼지만 아파치 라이브러리를 이용하려면 다음과 같이 DownLoadHtml 부분을 바꿔 주면 된다.

HttpGet http = new HttpGet(string);
  DefaultHttpClient client = new DefaultHttpClient();
  String temp = "";
  try{
   HttpResponse response = client.execute(http); 
   String line = "";
   BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
   while((line=br.readLine())!=null){
    temp+=(line+'\n');
   }
   br.close();
  }
  catch(Exception ex){}
  return temp;

위에서 보면 메서드들을 이용해서 헤더를 통하여 오라클이나 타 데이터 베이스와도 통신이 가능 할 것이란 것을 추측 할 수 있다. 시간 나면 나중에 해 봐야겠다.