반응형
[HTML]출처: http://blog.naver.com/geerark/100008855341
HttpClient를 활용한 프로그래밍은 여섯 개의 주요 단계로 정리할 수 있다.
HttpClient 인스턴스를 생성한다.
- HTTP 메소드 중 하나의 인스턴스를 생성한다. 이 때, 연결할 URL을 생성자의 파라미터로 전달한다.
HttpClient 인스턴스에게 메소드 실행을 명령한다.
- Response 객체를 읽는다.
- HTTP 연결을 해제한다.
- Response를 이용한 작업
좀 더 간결하게 정리해보면
- HttpClient 객체 생성
- HTTP 메소드 객체 생성
- HTTP 메소드 실행
- Response 객체 읽기
- HTTP 연결 해제
- Response를 이용한 작업
이제 내용을 살펴보자.
HttpClient 객체 생성
HttpClient는 HTTP user-agent 를 나타내는 Jakarta Commons HttpClient의 주요 객체이다. HttpClient는 하나의 HTTP State와 하나 이상의 HTTP 연결을 갖고 있다.
코드야 무지 간단하다. import를 했다고 가정하면 한줄이면 족하다.
HttpClient client = new HttpClient();
HTTP 메소드 객체 생성
HTTP 스펙에 정의된 HTTP 메소드에 대한 구현을 제공한다. 이들은 모두 HttpMethod 인터페이스를 구현하고 있으며, org.apache.commons.httpclient.methods 패키지에서 찾을 수 있다.
예를 들어 HTTP GET 메소드를 이용한다면 GetMethod 객체의 인스턴스를 생성한다. GET 메소드는 RFC2616 9.3절에 정의되어 있다. URL을 나타내는 문자열의 생성자의 파라미터로 제공한다.
HttpMethod method = new GetMethod("http://blog.empas.com/ahnyounghoe/");
HTTP 메소드 실행
executeMethod 메소드 호출을 해야 실제로 HTTP 메소드가 실행된다.
int statusCode = client.executeMethod(method);
여기서 네트워크 연결이라는 것은 신뢰도가 낮기 때문에 예외 처리에 신경을 써야 한다. executeMethod 메소드의 경우 두 종류의 예외를 발생시킨다. 먼저, 일시적으로 발생하는 에러의 경우, HttpRecoverableException이 발생하는데, 이는 다시 요청을 수행하면 연결이 성립되는 경우가 많다. 따라서, 연결을 다시 시도해야 한다. 주의할 점은 HttpRecoverableException의 경우 IOException을 상속받았기 때문에 IOException에 대한 예외처리를 먼저하면 HttpRecoverableException에 대한 예외처리가 무시된다. 일시적인 문제가 아닌 경우는 IOException 예외 처리를 해야한다.
기본적으로 세 번 요청을 반복하는데, 이를 변경하여 5번 반복하도록 하는 설정이다.
DefaultMethodRetryHandler retryhandler = new DefaultMethodRetryHandler();
retryhandler.setRequestSentRetryEnabled(true);
retryhandler.setRetryCount(5);
method.setMethodRetryHandler(retryhandler);
retryhandler.setRequestSentRetryEnabled(true);
retryhandler.setRetryCount(5);
method.setMethodRetryHandler(retryhandler);
Response 객체 읽기
Response를 읽는 방식은 세 가지이다.
- method.getResponseBody()
- method.getResponseBodyAsString()
- method.getResponseBodyAsStream()
첫번째 방식은 Response를 byte 배열로, 두번째는 String, 세번째는 Stream 형태로 반환한다.
HTTP 연결 해제
DB 연결을 해제하듯이, HTTP 연결 역시 반환해야 한다.
method.releaseConnection();
Response를 이용한 작업
요청을 처리한 결과로 반환된 Response를 가지고 뭐든 ~
초간단 버전으로 만든 HttpClient 프로그래밍 예제이다.
public void testHttpClientABC(){
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://blog.empas.com/ahnyounghoe/");
int statusCode = 0;
try {
statusCode = client.executeMethod(method);
byte[] responseBody = method.getResponseBody();
System.out.println(new String(responseBody));
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod("http://blog.empas.com/ahnyounghoe/");
int statusCode = 0;
try {
statusCode = client.executeMethod(method);
byte[] responseBody = method.getResponseBody();
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.out.println("HttpException");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException");
e.printStackTrace();
}finally{
method.releaseConnection();
}
}
System.out.println("HttpException");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException");
e.printStackTrace();
}finally{
method.releaseConnection();
}
}
참조
HttpClient Tutorial: http://jakarta.apache.org/commons/httpclient/tutorial.html
[/HTML]반응형
'Know > Java' 카테고리의 다른 글
자바서비스넷 기술자료 링크 (2) | 2006.02.07 |
---|---|
A Collection of JVM Options (0) | 2006.01.26 |
캐릭터셋 관련 (0) | 2006.01.05 |
불필요한 JSP 재컴파일을 피하는 방법 (0) | 2005.12.20 |
유니코드(Unicode)와 유니코드 인코딩 (0) | 2005.08.08 |