프로그래밍

[Java] HttpClient 간단 사용법 (@ 특정 IP 사용)

FLY32 2009. 3. 3. 10:55

    /**
     * HttpClient 간단 Test (+ 여러 IP 중에서 특정 IP 사용하기)
     * @author samE
     * @since  2009-03-03
     * @return responseCode
     * @throws Exception
     */
    public static int httpClientTest() throws Exception {
        
        String setIpAddr = "10.101.46.59";
        URL url = new URL("http://127.0.0.1:8080");
        
        HttpConnectionManager httpConnMgr = new SimpleHttpConnectionManager(); 
        HttpConnectionManagerParams httpConnMgrParams
                                           = new HttpConnectionManagerParams();
        
        // Connection Timeout 설정
        httpConnMgrParams.setConnectionTimeout(10000);
        
        // SO Timeout 설정
        httpConnMgrParams.setSoTimeout(120000);
        httpConnMgr.setParams(httpConnMgrParams);
        
        // HttpClient 객체 생성
        HttpClient httpClient = new HttpClient(httpConnMgr);

        
        PostMethod post = new PostMethod(url.toString());
        
        boolean bSet = false;
        Enumeration nets = NetworkInterface.getNetworkInterfaces();
                            
        System.out.println("----------- InetAddress List -----------");
        
        // Network Interface 개수만큼 반복 (물리적 랜카드가 여러개 장착되어 있을 때)
        while(nets.hasMoreElements()) {
            NetworkInterface net = (NetworkInterface)nets.nextElement();
            Enumeration inetAddrs = net.getInetAddresses();
            
            // InetAddress 개수만큼 반복 (하나의 랜카드에 여러 가상 IP가 설정되어 있을 때)
            while(inetAddrs.hasMoreElements()) {
                InetAddress inetAddr = (InetAddress)inetAddrs.nextElement();
                System.out.println(inetAddr.getHostAddress());
                
                // InetAddress의 주소가 요청된 IP주소와 같은 값을 가졌을 경우   
                if(setIpAddr.equals(inetAddr.getHostAddress())) {
                    System.out.println("----------------------------------------");
                    System.out.println("set ip address : " 
                                                      + inetAddr.getHostAddress());
                    System.out.println("----------------------------------------");
                    
                    // 해당 IP를 HttpClient 객체에 셋팅하고 반복문을 빠져 나감.
                    httpClient.getHostConfiguration().setLocalAddress(inetAddr);
                    bSet = true;
                    break;
                }
            }
            if(bSet) {
                break;
            }
        }
        
        // HttpHeader 설정
        post.setRequestHeader("Accept"        , "....");
        post.setRequestHeader("Authorization" , "....");
        post.setRequestHeader("SOAPAction"    , "\"ebXML\"");
        post.setRequestHeader("Content-Type"  , "multipart/related; ....");
        post.setRequestHeader("Connection"    , "keep-alive");
        
        // Execute
        return httpClient.executeMethod(post);
    }