-
HttpClient - Backside Submit Form카테고리 없음 2008. 7. 21. 12:00HttpClient - Backside Submit Form
SCENARIO
위 그림과 같이, 새로 개발한 사이트에 있는 자료를 클릭 한번으로 기존 사이트에 자료를 등록하려고 한다. 기존 사이트에 등록할 데이터를 가져와 화면에 보이지 않는 Form을 두고 클릭한번으로 데이터를 전송한다면 간단하게 해결 할 수 있겠다. 하지만 등록할 자료에 파일이 포함되어 있다면 얘기가 달라진다.
파일은 특성상 Hidden from으로 전송할 수 없다. 사용자 몰래 파일을 전송한다는 것은 불가능한 것이다. 이때부터 생각이 복잡해진다. 파일을 제외한 데이터는 폼으로 전송하고 파일은 ftp로 전송하는 방법? 좀 복잡하긴 하겠지만 가능한 방법이다. 하지만 데이터나 ftp파일전송중 둘중 하나에서 예외상황이 발생한다면 그때부터 데이터는 꼬이기 시작한다. 암튼 이리저리 머리를 굴려도 쉬운방법은 잘 보이지 않는다.
바로 이때 유용한 도구가 JAVA 프로그램 안에서 폼을 전송 할 수 있게 도와주는 도구인 HttpClient다. 물론 파일전송도 지원한다. 먼저 다음 소스를 보자.
- String strProtocol = "http"; // 전송할 시스템의 프로토콜
String strUrl = "192.168.0.2" // 전송할 시스템의 URL
int intPortNo = 80; // 전송할 시스템의 포트번호
String strPage = "Get/sp1.jsp" // 전송할 시스템의 페이지 - HttpClient client = new HttpClient();
client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
client.getParams().setParameter("http.socket.timeout", new Integer(5000)); - // 전송하는 페이지의 캐릭터셋을 설정한다
client.getParams().setParameter("http.protocol.content-charset", "utf-8"); - client.getHostConfiguration().setHost(strUrl, intPortNo, strProtocol);
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
PostMethod filePost = new PostMethod(strPage + "?CAT=" + strCategory); - // 전송할 파일의 파일 객체를 생성합니다.
File sendFile = new File("C:\\SAMPLE.DAT"); - // 전송할 파라미터를 세팅합니다.
Part[] parts = { - // 세번째 인자인 인코딩은 전송할 시스템의 인코딩을 넣어준다
new StringPart("PARAM1", "PARAMETER1", "euc-kr"),
new StringPart("PARAM2", "PARAMETER2", "euc-kr"),
new FilePart("FILENAME", sendFile, "text/html; charset=UTF-8", "euc-kr")
}; - filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
- // 전송하는동안 기다리는 시간
- client.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
- int status = client.executeMethod(filePost);
- if (status == HttpStatus.SC_OK) {
- // 등록결과페이지의 Text전체를 받아온다.
String strReturnValue = StrUtil.nvl(filePost.getResponseBodyAsString());
if((strReturnValue).equals("SUCCESS")) isDoneTinfo = true;
System.out.print("Upload complete, response=" + strReturnValue);
} else {
System.out.print("Upload failed, response=" + HttpStatus.getStatusText(status)); - }
위와같은 방법으로 비교적 간단히 파일을 포함한 데이터를 전송시킬 수 있다. 전송결과까지 가져오므로 이에대한 처리도 가능하다. 빨간색으로 강조한 부분은 전송하는 곳의 인코딩과 전송받는곳의 인코딩을 설정하는 부분으로 한글이 깨지는 문제 발생시 체크해 보아야 할 부분이다.
INSTALLATION
HttpClient이외에도 추가적으로 라이브러리를 다운로드 받아야한다.
commons-httpclient-3.1.jar : http://hc.apache.org/downloads.cgi
commons-codec.jar : http://commons.apache.org/codec
commons-logging.jar : http://commons.apache.org/logging
junit.jar : http://www.junit.org
REFERENCEHttp Client Home : http://hc.apache.org/httpclient-3.x
- String strProtocol = "http"; // 전송할 시스템의 프로토콜