ABOUT ME

Today
Yesterday
Total
  • HttpClient - Backside Submit Form
    카테고리 없음 2008. 7. 21. 12:00
     
    HttpClient - Backside Submit Form

     

     
     

    SCENARIO

    위 그림과 같이, 새로 개발한 사이트에 있는 자료를 클릭 한번으로 기존 사이트에 자료를 등록하려고 한다. 기존 사이트에 등록할 데이터를 가져와 화면에 보이지 않는 Form을 두고 클릭한번으로 데이터를 전송한다면 간단하게 해결 할 수 있겠다. 하지만 등록할 자료에 파일이 포함되어 있다면 얘기가 달라진다.

    파일은 특성상 Hidden from으로 전송할 수 없다. 사용자 몰래 파일을 전송한다는 것은 불가능한 것이다. 이때부터 생각이 복잡해진다. 파일을 제외한 데이터는 폼으로 전송하고 파일은 ftp로 전송하는 방법? 좀 복잡하긴 하겠지만 가능한 방법이다. 하지만 데이터나 ftp파일전송중 둘중 하나에서 예외상황이 발생한다면 그때부터 데이터는 꼬이기 시작한다. 암튼 이리저리 머리를 굴려도 쉬운방법은 잘 보이지 않는다.

    바로 이때 유용한 도구가 JAVA 프로그램 안에서 폼을 전송 할 수 있게 도와주는 도구인 HttpClient다. 물론 파일전송도 지원한다. 먼저 다음 소스를 보자.

    1. String strProtocol   = "http";        // 전송할 시스템의 프로토콜
      String strUrl        = "192.168.0.2"  // 전송할 시스템의 URL
      int intPortNo        = 80;            // 전송할 시스템의 포트번호
      String strPage       = "Get/sp1.jsp"  // 전송할 시스템의 페이지
    2. HttpClient client    = new HttpClient();
      client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
      client.getParams().setParameter("http.socket.timeout", new Integer(5000));
    3. // 전송하는 페이지의 캐릭터셋을 설정한다
      client.getParams().setParameter("http.protocol.content-charset", "utf-8");
    4. client.getHostConfiguration().setHost(strUrl, intPortNo, strProtocol);
      client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
      PostMethod filePost = new PostMethod(strPage + "?CAT=" + strCategory);
    5. // 전송할 파일의 파일 객체를 생성합니다.
      File sendFile = new File("C:\\SAMPLE.DAT");
    6. // 전송할 파라미터를 세팅합니다.    
      Part[] parts = {
    7.   // 세번째 인자인 인코딩은 전송할 시스템의 인코딩을 넣어준다
        new StringPart("PARAM1", "PARAMETER1", "euc-kr"),
        new StringPart("PARAM2", "PARAMETER2", "euc-kr"),
        new FilePart("FILENAME", sendFile, "text/html; charset=UTF-8", "euc-kr")
      }; 
    8. filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
    9. // 전송하는동안 기다리는 시간
    10. client.getHttpConnectionManager().getParams().setConnectionTimeout(10000);
    11. int status = client.executeMethod(filePost);
    12. if (status == HttpStatus.SC_OK) {
    13.   // 등록결과페이지의 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));
    14. }

    위와같은 방법으로 비교적 간단히 파일을 포함한 데이터를 전송시킬 수 있다. 전송결과까지 가져오므로 이에대한 처리도 가능하다. 빨간색으로 강조한 부분은 전송하는 곳의 인코딩과 전송받는곳의 인코딩을 설정하는 부분으로 한글이 깨지는 문제 발생시 체크해 보아야 할 부분이다.

     

    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


    REFERENCE

     

Designed by Tistory.